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 버전으로 브로커, 쉘 스크립트로 명령을 내렸다. 그런데 버전이 다르면 옵션이 다르거나 해서 오류 발생할 수도 있음