Kafka
-
[Kafka] Partition 알아보기Kafka 2024. 5. 12. 11:30
- 목차 키워드.TopicPartitionReplication 들어가며.이번 글에서는 Kafka Topic 의 Partition 에 대해서 상세히 알아보는 시간을 가지려고 합니다.Partition 이 가지는 여러가지 중요 특징들에 대해서 최대한 많이 나열해보려고 합니다. Topic 과 Partition.Kafka 는 Topic 이라는 메시지 저장소가 존재합니다.Kafka CLI 를 통해서 최초로 Topic 을 생성하게 되는데요.Kafka Cluster 가 생성된 이후에 아래와 같은 형식의 CLI 명령어를 통해서 Topic 의 생성이 가능합니다.kafka-topics.sh --bootstrap-server localhost:9092 \--topic test_topic --create --partition..
-
[Kafka] max.block.ms 알아보기Kafka 2024. 2. 18. 07:04
- 목차 들어가며.이번 글에서는 Kafka Producer 설정인 max.block.ms 에 대해서 알아보겠습니다.max.block.ms 는 Kafka Producer 가 레코드를 생성하는 과정에서 대기하는 최대 시간을 설정하는 값인데요.이를 이해하기 위해서 몇가지 배경지식이 필요합니다. Accumulator & Batch. 먼저 카프카 프로듀서는 데이터를 생성할 때에 레코드를 하나씩 하나씩 생성하지 않습니다.카프카 프로듀서가 브로커에게 one by one 형식으로 레코드를 전송하지 않는 구조이구요.대신 레코드들을 하나의 Batch 에 모은 후에 Batch 를 브로커에게 전달하게 됩니다."batch.size" 라는 카프카 프로듀서의 설정은 하나의 Batch 에 얼마 만큼의 레코..
-
[Kafka-Connect] Debezium MySQL Connector 구현하기Kafka 2024. 2. 18. 07:04
- 목차 들어가며. 이번 글에서는 간단하게 Debezium MySQL Connector 을 활용하여 MySQL CDC 를 구현하는 방법에 대해서 알아보려고 합니다. MySQL Docker Container 실행하기. 먼저 MySQL Docker Container 를 실행합니다. test_db 데이터베이스와 test_table 테이블을 생성합니다. 그리고 Replication 을 수행할 user 인 kafkaconnect 를 생성합니다. cat docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=1234 -p 3306:3306 \ --mount type=bind,source=/tmp/init.sql,target=/docker-entrypoint-initdb.d/init..
-
[Kafka-Streams] Json 기반 Custom Serdes 구현하기Kafka 2024. 2. 17. 17:49
- 목차 들어가며. Kafka Streams 에서 JSON 기반의 데이터를 직렬화/역직렬화 할 수 있는 Custom Serdes 를 구현하는 방법에 대해서 알아보려고 합니다. 우선 이번 글에서 사용할 데이터는 Kaggle 에서 제공되는 Bank Client 데이터를 사용할 예정입니다. https://www.kaggle.com/datasets/henriqueyamahata/bank-marketing Bank Marketing source: https://archive.ics.uci.edu/ml/datasets/bank+marketing www.kaggle.com bank-additional-full.csv 파일의 간단한 형태는 아래와 같습니다. +---+-----------+--------+--------..
-
[Kafka] Transaction Coordinator 알아보기Kafka 2024. 2. 7. 23:02
- 목차 들어가며. Kafka Consumer 입장에서 Group Coordinator 가 존재하듯이, Kafka Producer 는 Transaction Coordinator 가 존재합니다. Kafka Producer 의 Transaction 처리를 위해서 특정 Broker 는 Transaction Coordinator 로써 동작하게 됩니다. Transaction Coordinator 는 어떻게 결정될까 ? 먼저 Transactional Producer 에 의해서 Transaction 이 최초로 실행되면, Transaction State 를 기록하기 위한 __transaction_state Topic 이 생성됩니다. Transaction Coordinator 는 하나의 Broker 입니다. 아래 이미지..
-
[Kafka] Rebalance 가 발생하는 경우들 알아보기 ( Rebalance Scenario )Kafka 2024. 2. 4. 15:08
- 목차 들어가며. 이번 글에서는 Rebalance 가 발생하는 여러가지 경우들에 대해서 자세히 알아보려고 합니다. 사용하게 될 Consumer 예제 코드는 아래와 같습니다. kafka-clients 2.8.1 모듈을 사용하였구요. CustomRebalanceListener 추가하여 Rebalance 가 발생하는 상황을 출력하도록 Consumer 프로그램을 작성하였습니다. package com.westlife.consumers; import org.apache.kafka.clients.consumer.*; import org.apache.kafka.common.*; import org.apache.kafka.common.serialization.*; import java.time.*; import jav..
-
[Kafka] Kafka Rebalance Protocol 알아보기 ( JoinGroup, LeaveGroup )Kafka 2024. 2. 4. 07:53
- 목차 Rebalance 란 무엇일까요?먼저 Rabalance 를 어휘적으로 살펴볼려고 합니다.Rebalance 는 Unbalance 인 상태를 해결하는 행위입니다.Partition 과 Consumer 사이의 관계가 Unbalance 상태가 될 수 있습니다.Unbalance 의 원인 제공이 Partition 일 수도 있고, Consumer 일 수도 있겠죠 ?Partition 의 갯수가 늘어나거나, 어떤 Consumer 가 먹통이 될 수 있죠.이러한 경우에 Partition 과 Consumer 사이의 적절한 매칭 관계에 문제가 발생하고 이러한 상태가 Unbalance 상태입니다.그리고 Kafka Broker ( 특히, Group Coordinator ) 는 Unbalance 를 감지하여 Rebalance..
-
[Kafka] API Version 알아보기 ( Protocol )Kafka 2024. 1. 31. 06:11
- 목차 들어가며.이번 글에서는 Kafka 에서 클라이언트와 브로커가 통신을 수행하기 위해서 사용되는 API Version 에 대해서 알아보려고 합니다.일반적으로 Broker 의 버전과 API Version 은 동일하게 사용하는 것이 권장됩니다.하지만 API Version 을 명시하지 않아도 Kafka Wire Protocol 상에서 적절한 API Version 을 추론할 수 있습니다.그래서 Kafka Client 모듈을 사용할 때에 API Version 을 명시하지 않아도 Consumer 와 Producer 를 쉽게 사용할 수 있죠. Confluent Version & Kafka Version.아래 페이지는 Confluent 의 버전과 카프카 버전에 대한 정보를 제공합니다.https:..
-
[Kafka Producer] Data Loss 는 언제 발생할까 ?Kafka 2024. 1. 21. 07:30
- 목차 함께 보면 좋은 글. https://westlife0615.tistory.com/474 Docker 로 Kafka Cluster 구축해보기. - 목차 소개. 저는 로컬 환경에서 카프카 관련 테스트를 진행하는 경우가 많이 생기더군요. 그래서 docker-compose 를 활용하여 Kafka, ZooKeeper 클러스터를 구축하는 내용을 작성하려고 합니다. docker-com westlife0615.tistory.com 들어가며. 카프카 프로듀서는 비즈니스의 요구사항에 따라서 Data Loss 를 허용할 것인지, Data Duplication 을 허용할 것인지를 결정해야합니다. Data Loss 를 허용하는 경우에는 서비스에서 데이터의 활용하는 속도를 늘리고, 시간을 감축시킬 수 있습니다. 웹사이트..
-
Kafka Controller 알아보기Kafka 2024. 1. 17. 17:48
- 목차 들어가며. 카프카는 여러개의 브로커들로 구성됩니다. 브로커의 역할은 토픽을 관리하고, 레코드들을 복제하며, 클라이언트인 Producer 와 Consumer 들과 소통해야합니다. 아래의 이미지는 브로커의 역할을 표현한 그림인데요. 3개의 브로커로 구성된 카프카 클러스터는 1개의 Leader Replica 인 Broker2 와 Follower Replica 인 Broker 1, 3 을 가집니다. Follower Replica 인 Broker 1 과 Broker 3 은 열심히 Broker 2 의 데이터들을 복제합니다. Follower Replica 의 큰 역할이 Replication 이기 때문이죠. 그리고 Leader Replica 인 Broker2 는 Client 와 통신하며 데이터를 생성하고 공급..