home
2. 아파치 카프카 cli 활용
카프카 커맨드 라인 툴
- 필수 옵션, 선택 옵션
kafka-topics.sh
- 파티션 개수, 복제 개수는 옵션을 지정하지 않으면 브로커에 지정된 기본값으로 생성된다.
- —topic 으로 생성
- —describe로 상세 설명
- —create \ —bootstrap-server
- —topic ~.kafka
- 파티션 개수를 늘릴 때는 —alter + ~
- 줄이진 못하니 토픽을 새로 만드는게 낫다
kafka-configs.sh
- min.insync.replicas 옵션을 지정할 수 있다.
--broker
,—-all
,—-describe
옵션을 사용해서 server.properties를 조회할 수 있다.
kafka-console-producer.sh
- 토픽에 데이터(record)를 테스트 용도로 많이 넣을 수 있다.
—-property “parse.key=True”
-
—-property “key.separate=:”
를 해야 키를 지정할 수 있다. - 동일한 메시지키는 동일한 파티션으로 들어간다.
- 동일한 메시지키의 데이터들은 순서를 지킬 수 있다.
- 키를 지정하지 않을 경우는 null로 전송된다.
kafka-console-consumer.sh
- 특정 토픽에 있는 데이터를 consume해서 안에 있는 데이터를 임시적으로 조회하기 위한 sh
-
from-beginning 옵션을 주면 가장 처음 데이터부터 출력된다.
- 메시지 키를 조회하려면
—property print.key=true
,—property key.separator=””
를 추가하면 된다. —max-messages int
를 지정해서 최대 컨슘 메시지 개수를 설정하라—-partition
옵션을 사용하면 특정 파티션만 컨슘할 수 있다.-
—-group
: 이 컨슈머 그룹을 기반으로 동작하게 되면 특정 목적을 가진 컨슈머를 묶음으로 사용하고, 어느 레코드까지 읽었는지에 대한 데이터가 브로커에 저장된다. 즉 커밋이 가능해짐 -
여기까지 commit, hello-group이라는 그룹에서는 helllo 까지 읽었다라는 것을 커밋한다.
- __consumer_offsets가 생긴다.
kafka-consumer-groups.sh
- 컨슈머를 생성하면 그룹은 필수
- —list
- —describe를 사용하면 어떤 토픽을 대상으로 어디까지 가져왔는지 알 수 있다.
- 컨슈머 랙 = 마지막 레코드의 오프셋 - 현재까지 가져간 레코드의 오프셋 → 이것으로 컨슈머 개수를 늘리거나 파티션을 늘린다.
—-reset-offsets
- 만약 10억건의 데이터가 밀려있다. 컨슈머의 데이터가 1번을 처리하고 있을 때, 컨슈머가 10억까지 가기 위해서는 9억9천 이상의 데이터를 처리해야한다. 이럴 때 offset을 리셋을 한다.
그 외 커맨드 라인 툴
- kafka-producer-perf-test.sh
- 프로듀서의 퍼포먼스를 측정할 때 사용된다.
- kafka-consumer-perf-test.sh
- kafka-reassign-partitions.sh
- 특정 브로커에 리더 파티션이 몰리면 이 커맨드를 사용해서 분산시킨다.
- auto.leader.rebalance.enable 옵션으로 자동 리밸런싱
- kafka-delete-record.sh
- offset이 5 이면, 0~5 까지 지우겠다
- kafka-dump-log.sh
토픽을 생성하는 두가지 방법
- 첫번째는 kafka-topics.sh —create
-
두번째 방식은 프로듀서나 컨슈머가 요청했을 때 브로커 옵션으로 토픽이 생성된다.
- 근데 데부분은 커맨드 라인 툴로 상세 설정으로 명시하여 토픽을 생성하는 것이 좋다.
브로커와 커맨드 라인 툴 버전을 맞춰야 하는 이유
- 2.5.0 버전으로 브로커, 쉘 스크립트로 명령을 내렸다. 그런데 버전이 다르면 옵션이 다르거나 해서 오류 발생할 수도 있음