리눅스/kafka

kafka producer consumer의 개요(kafka-console-producer , kafka-console-consumer)

정지홍 2024. 9. 5. 21:24

producer?

데이터를 생산 및 kafka 클러스터 내의 특정 topic에 데이터를 보내는 역할

( kafka는 이 데이터를 저장 및 여러 파티션에 분산 저장)

 

  • 특정 topic에 메시지를 보내고, 이는 kafka 로그에 기록되며, 나중에 consumer가 이를 가져갈 수 있다.
  • 토픽의 어떠한 파티션에 보낼지 결정
  • 데이터 복제시 성공적으로 이루어졌는지  확인하며 아닐시 재시도
    • at most once: 한 번 전송을 시도하지만 실패 시 재시도하지 않음.
    • at least once: 메시지를 반드시 한 번 이상 전송하며, 실패 시 재시도
    • exactly once: 중복 없이 한 번만 전송되는 보장 모드로, Kafka가 제공하는 강력한 기능

동작과정

  1. Producer가 Kafka 브로커에 연결하여 데이터를 전송.
  2. Producer는 데이터를 토픽 내의 특정 파티션으로 보냄.
  3. Kafka 브로커는 메시지를 로그에 기록하고, 복제 설정에 따라 다른 브로커로 복제.
  4. 전송이 완료되면 Producer는 성공 여부를 응답받음.

consumer?

consumer는 kafka의 특정 토픽으로부터 메시지를 읽어 들인다.

consumer는 msg를 처리한다. 그리고 이를 메시지의 offset을 kafka에 커밋하여 다음 메시지를 이어서 받을 준비를 한다.

 

  • 카프카에서 메시지는 각 파티션에 순차적으로 저장되며, consumer는 각 파티션에서 마리막으로 처리한 메시지의 위치를 나타내는 오프셋을 카프카에 기록해서 이후 메시지를 이어서 처리 가능
  • 재시도 및 오류처리

동작과정

  1. Consumer가 Kafka 브로커에 연결하여 특정 토픽의 파티션에 있는 메시지를 가져온다.
  2. Consumer는 메시지를 처리한 후, 해당 메시지의 오프셋을 커밋하여 이후 메시지를 이어서 받을 수 있게 한다.
  3. Consumer가 컨슈머 그룹에 속해 있는 경우, Kafka는 각 파티션을 하나의 Consumer에게만 할당하여 데이터를 병렬로 처리할 수 있게 한다.
  4. 메시지를 처리한 후, 필요한 경우 오프셋을 수동으로 커밋하거나 자동으로 관리한다.

consumer의 auto.offet.reset

  • consumer가 topic에 처음 접속하여 msg를 가져올때 가장 오래된 처음 offset부터(earliest) 가져올지, 가장 최근인 마지막 offset부터 가져올지 결정한다.
  • ex) kafka-console-consume명령어를 쓸때 --from-beginning을 써야만 auto.offset.reset이 earlist로 결정됨.
    • auto.offsest.reset은 lastest로 결정됨. 즉, 마지막 offset부터 읽음 

 


kafka의 콘솔 프로듀서 실행하기

kafka-console-producer --bootstrap-server ipAddr:Port --topic -test-topic
  • kafka-console-producer: 카프카에서 제공하는 콘솔 프로듀서 도구다. 이를 사용하면 터미널에서 바로 메시지를 전송.
  • --bootstrap-server ipAddr:Port: 카프카 클러스터의 주소를 지정
  • --topic 메시지받는_토픽 : 해당 토픽에 메시지 전송. 여기서는 -test-topic에 전송한다.

kafka의 콘솔 컨슈머 실행하기

kafka-console-consumer --bootstrap-server ipAddr:Port --topic -test-topic
  • 설정한 topic의 메시지를 읽는다.
    •  --from-beginning
    • default는 lastest

--from-beginning 옵션을 줌.
lastest