Kafka
-
[Kafka] Producer 의 EndTxn API 알아보기 ( Commit or Abort , Transaction Coordinator )Kafka/Kafka Producer 2024. 7. 4. 07:16
- 목차 EndTxn API 란 ?EndTxn API 는 Transactional Producer 가 트랜잭션을 종료하기 위해서 브로커에게 전달하는 API 입니다.카프카 라이브러리에서는 commit_transaction or abort_transaction 와 같은 추상화된 함수로 표현되곤 합니다.이러한 함수가 실행되면 내부적으로 EndTxn API 의 Request/Response 가 동작하게 됩니다. EndTxn API 의 형식은 아래와 같습니다.EndTxn Request (Version: 1) => transactional_id producer_id producer_epoch committed transactional_id => STRING producer_id => INT64 produce..
-
[Kafka] Connect Worker 와 FindCoordinator API 알아보기Kafka/kafka Connect 2024. 7. 1. 06:15
- 목차 FindCoordinator API 란 ?FindCoordinator 란 Group Coordinator 또는 Transaction Coordinator 를 찾는 작업을 의미합니다.Coordinator 는 여러 브로커 중 하나의 브로커를 의미하며, Kafka Consumer 나 Producer 의 동작을 지원하기 위해서 존재합니다.예를 들어, Kafka Producer 는 transactional.id 와 매칭되는 Broker 가 있는데, 이를 Transaction Coordinator 라고 합니다.이 Transaction Coordinator 는 Producer 의 Producer ID 를 생성해주며, Producer Epoch 를 관리합니다.또한 __transaction_state 토픽이 트..
-
[Kafka] __consumer_offsets Topic 알아보기Kafka/Kafka Consumer 2024. 7. 1. 06:15
- 목차 __consumer_offsets Topic 의 생성 시점."__consumer_offsets" Topic 은 Kafka 의 내장된 토픽입니다.그래서 이는 "kafka-topics.sh" 명령어를 사용하여 사용자가 직접 생성하는 토픽이 아닙니다.하지만 빌트인 형태로 존재하는 토픽이더라도 __consumer_offsets 토픽은 카프카 클러스터가 생성됨과 동시에 생성되지 않습니다.__consumer_offsets 토픽은 최초로 Consumer 가 실행되는 시점에 생성되며, Lazy 한 방식으로 __consumer_offsets 토픽을 생성합니다. 아래의 명령어는 현재 생성된 토픽의 목록을 출력하는 명령어입니다.( 저의 경우에는 카프카 브로커의 advertised.listeners 주소가 kafka..
-
[Kafka] Static Membership 과 Partition Assignment 관계 알아보기 ( group.instance.id )Kafka/Kafka Consumer 2024. 6. 30. 14:57
- 목차 들어가며.Kafka Consumer 들은 group.id 를 기반으로 하나의 Consumer Group 을 형성합니다.그리고 각각의 Consumer 들은 자신의 고유한 member id 를 가지게 되는데요.이 member id 는 Consumer 가 Group Coordinator 에게 JoinGroup API 를 요청함으로써 생성됩니다.즉, Consumer 는 Group Coordinator 가 생성해주는 랜덤한 식별값을 전달받아 자신의 member id 로써 사용합니다.이 과정에서 Leader Consumer 가 선정되고, 나머지 Consumer 들은 Follower Consumer 가 됩니다.( 가장 먼저 JoinGroup API 를 요청한 Consumer 가 Leader Consumer ..
-
[Kafka] Consumer 의 max.poll.records 와 Offset Commit 알아보기Kafka/Kafka Consumer 2024. 6. 30. 14:56
- 목차 들어가며.카프카 컨슈머는 max.poll.records 설정을 통해서 Consumer Poll 함수를 통해서 반환되는 레코드의 갯수를 제한할 수 있습니다.예를 들어서 아래와 같은 형식으로 획득한 ConsumerRecords 를 최대 500개의 Record 들을 가지게 됩니다. Properties props = new Properties();props.put("max.poll.records", 500);Consumer consumer = new KafkaConsumer(props);ConsumerRecords records = consumer.poll(Duration.ofMillis(10000));System.out.println("Fetched Records: " + records.count()..
-
[Kafka] Consumer가 추가되면 Rebalance는 어떻게 동작할까?Kafka/Kafka Consumer 2024. 6. 30. 14:56
- 목차 들어가며.카프카 컨슈머는 실행되면서 Consumer Group 을 형성합니다.동일한 group.id 를 가지는 여러 컨슈머들은 하나의 Consumer Group 에 소속되게 됩니다.이 과정에서 JoinGroup 과 SyncGroup API 를 활용하게 되고, Consumer Group 의 형성과 파티션 할당이 이루어집니다.그리고 여러가지 상황에 의해서 컨슈머가 추가되거나 종료될 수 있는데요.이 과정에서 리밸런싱이 발생합니다. 이번 글에서는 컨슈머의 여러가지 동작에 따른 리밸런싱이 어떻게 발생하는지 알아보는 시간을 가지려고 합니다. Rebalance 1) 새로운 컨슈머가 추가되는 상황.기존의 Consumer Group 이 존재하는 상황에서 새로운 컨슈머가 추가됩니다.이때에 새로운 컨슈머는 Joi..
-
[Kafka] Consumer Heartbeat 의 내부 동작 원리Kafka/Kafka Consumer 2024. 6. 30. 14:56
- 목차 들어가며.카프카 컨슈머는 실행 후 Consumer Group 을 형성합니다.이 과정에서 컨슈머들은 브로커와 FindCoordinator, JoinGroup, SyncGroup 의 API 통신을 수행합니다. 이렇게 여러 컨슈머들을 하나의 그룹이 됩니다.하나의 Consumer Group 된 컨슈머들은 SyncGroup API 를 마무리로 각자 자신이 소비해야할 파티션 목록을 부여받게 됩니다.그리고 본격적으로 데이터의 소비를 시작합니다. ( Fetch API 를 통해서 ) 카프카 컨슈머는 Fetch API 를 통해서 데이터를 소비하는 작업 뿐만 아니라 Heartbeat 요청을 브로커에게 꾸준히 전달합니다.이때 Heartbeat 를 전달받는 브로커를 Group Coordinator 라고 부릅니다.여러 ..
-
[Kafka] Consumer 의 Fetch Request 와 max_wait_ms 관계 알아보기 ( fetch.wait.max.ms )Kafka/Kafka Consumer 2024. 6. 30. 14:56
- 목차 들어가며.카프카 컨슈머는 브로커에게 데이터를 요청할 수 있습니다.일반적인 카프카 클라이언트 모듈에서 Poll 과 같은 함수로 이러한 데이터 요청 기능이 추상화되어 있습니다.Poll 함수 내부적으로는 Fetch API 가 사용되구요.Fetch API 의 요청과 응답의 형식은 아래와 같습니다. Fetch Request (Version: 1) => replica_id max_wait_ms min_bytes [topics] replica_id => INT32 max_wait_ms => INT32 min_bytes => INT32 topics => topic [partitions] topic => STRING partitions => partition fetch_offset part..
-
[Kafka] SyncGroup API 알아보기Kafka/Kafka Consumer 2024. 6. 30. 14:56
- 목차 들어가며.Kafka Consumer 는 리밸런싱이라는 과정을 통해서 Consumer Group 을 형성합니다.이 과정에서 FindCoordinator, JoinGroup, SyncGroup 등의 API 가 사용됩니다.SyncGroup 은 각 Consumer 와 Topic-Partition 의 할당을 마무리짓고, 본격적인 Record Fetch 를 수행하는 마지막 과정입니다.이번 글에서 SyncGroup API 에 대해서 상세히 알아보도록 하겠습니다. https://westlife0615.tistory.com/944 [Kafka] FindCoordinator API 와 Group Coordinator 알아보기- 목차 들어가며.Kafka Consumer 는 group.id 라는 설정을 통해서 Con..
-
[Kafka] Consumer 는 JoinGroup API 를 어떻게 요청할까 ?Kafka/Kafka Consumer 2024. 6. 30. 14:56
- 목차 들어가며.Kafka Consumer 는 group.id 라는 속성을 가집니다.group.id 라는 속성은 원격에서 실행되는 여러 개의 Kafka Consumer 들을 하나의 Group 으로 동작하게 만듭니다.오늘의 주제인 "JoinGroup API" 는 여러 개의 Kafka Consumer 들을 하나의 Group 으로 동작하게 만드는 API 중의 하나인데요.카프카 브로커는 JoinGroup API 를 요청한 여러 개의 Kafka Consumer 들을 모아서 하나의 Consumer Group 으로 동작하게 만듭니다.이어지는 내용에서 JoinGroup 과 관련된 상세한 이야기를 설명해보겠습니다. JoinGroup API .아래의 정보는 Kafka Consumer 가 브로커에게 요청하는 JoinGr..