Kafka
-
Debezium Connector 실습 환경 구축하기Kafka/kafka Connect 2024. 6. 19. 07:02
본 글에서는 Debezium Connector 의 실습 환경을 세팅하기 위해서 docker-compose.yaml 을 세팅합니다.3개의 Kafka Broker 와 3개의 Kafka Connect Worker 들로 구성된 클러스터를 구축합니다.그리고 kafka-ui 와 kafka-connect-ui 라는 Kafka 와 관련된 관리자 Web UI 를 함께 실행합니다. 참고로 Kafka Connector Worker 의 경우에는 Debezium Connector Plugin 을 추가한 Docker Image 를 사용하였습니다. docker network create kafkacat /tmp/docker-compose.yamlversion: '3.8'services: kafka1: image: conf..
-
[Kafka Connect] JdbcSourceConnector Bulk Mode 알아보기Kafka/kafka Connect 2024. 6. 18. 05:59
- 목차 들어가며.이번 글에서는 JdbcSourceConnector 의 Bulk Mode 에 대해서 알아보도록 하겠습니다.JdbcSourceConnector 는 크게 두가지 모드로 동작합니다.한가지 방식인 incrementing 모드이고 다른 하나는 bulk 모드입니다.incrementing 모드는 특정 Table 의 모든 Row 들을 하나씩 추출하게 됩니다.만약 Table 의 Primary Key 를 기준으로 incrementing 모드로 데이터 추출을 하게 된다면,Primary Key 1번부터 Row by Row 방식으로 데이터를 처리하게 되죠.아래의 두 링크에서 incrementing 방식의 JdbcSourceConnector 의 동작을 확인할 수 있습니다. https://westlife0615.t..
-
[Kafka Connect] JdbcSourceConnector table.whitelist 알아보기Kafka/kafka Connect 2024. 6. 18. 05:59
- 목차 들어가며.이번 글에서는 JdbcSourceConnector 의 table.whitelist 속성에 대해서 알아보도록 하겠습니다.JdbcSourceConnector 는 Kafka Connect 의 Source Connector 로써 외부 저장소로부터 데이터를 추출하는 작업을 수행합니다.이름처럼 Jdbc Driver 와 호환되는 모든 SQL 기반의 데이터베이스를 그 대상으로 삼습니다.MySQL 과 같은 SQL 기반 데이터베이스를 Table 이라는 논리적은 규격을 정의하고, 그 규격대로 데이터를 생성합니다.JdbcSourceConnector 의 table.whitelist 속성은 JdbcSourceConnector 가 획득해야하는 모든 테이블을의 이름을 작성합니다.이렇게 table.whitelist ..
-
[Kafka Connect] JdbcSourceConnector 구현해보기 (1)Kafka/kafka Connect 2024. 6. 17. 05:59
- 목차 들어가며.이번 글에서는 Kafka Connect 의 JdbcSourceConnector 에 대해서 간단히 알아보는 시간을 가지겠습니다.JdbcSourceConnector 를 실행하기 위해서 Kafka Broker, Zookeeper, Connect Worker 와 MySQL 등 여러가지 요소들이 실행되어야 합니다.또한 Kafka Connect Worker 내부에 JdbcSourceConnector Plugin 도 추가되어야 하는데요.이번 글에선 Docker 환경을 활용해서 JdbcSourceConnector 를 실행해보는 간단한 실습을 진행해보려고 합니다. Kafka Broker 와 Zookeeper 실행하기.먼저 Kafka Broker 와 Zookeeper 를 Docker 를 통해서 실행해보도..
-
[Kafka] Adaptive Partitioning 코드로 살펴보는 내부 동작 원리 ( BuiltInPartitioner )Kafka 2024. 6. 9. 08:16
- 목차 들어가며.Kafka의 Adaptive Partitioning 은 Kafka 프로듀서가 데이터를 효율적으로 분배하기 위해 동적으로 파티션 할당 전략을 조정하는 기법입니다.3.x.x 대 버전의 Kafka Client Module 에서는 기본적으로 채택하고 있는 방식이며,이는 Hash Partitioning 과 Sticky Partitioning 을 동시에 제공합니다. Adaptive Partitioning 의 구체적인 전략은 아래와 같습니다.1. Record 에 Key 가 존재하지 않을 시에는 Sticky Partitioning 기법을 사용합니다.2. Record 에 Key 가 존재한다면 Hash Partitioning 기법은 제공합니다. 이를 이미지로 표현하면 아래와 같습니다.먼저 Key 가 존..
-
[Kafka] BufferPool 알아보기 (org.apache.kafka:kafka-clients)Kafka 2024. 6. 3. 06:08
- 목차 들어가며.Kafka Producer 는 BufferPool 이라는 구성 요소를 통해 데이터를 효과적으로 관리합니다.BufferPool 은 이름에서 알 수 있듯이, Kafka Producer 가 사용할 버퍼(Buffer) 를 제공하는 핵심적인 역할을 수행합니다.본 글에서는 Java의 org.apache.kafka:kafka-clients 모듈을 기반으로 BufferPool 의 동작 원리를 상세히 설명할 예정입니다.Java 로 구현된 Kafka Producer 는 Java NIO 의 ByteBuffer 를 활용하여 데이터를 처리합니다.이를 통해 Kafka 의 BufferPool 은 ByteBuffer 를 효율적으로 재활용하며 클라이언트(Producer)에게 필요한 버퍼를 제공합니다.즉, Java N..
-
[Kafka] Timeindex 알아보기Kafka 2024. 6. 1. 09:26
- 목차 들어가며.카프카는 Producer 로부터 전달받은 데이터들을 저장합니다.이 데이터들은 Log Segment 라는 단위로 파일로써 저장되는데요.Log Segment 는 log.segment.bytes, log.segment.ms 라는 기준에 따라서 Flush 가 진행됩니다.예를 들어, log.segment.bytes 가 1KB 이고 2KB 만큼의 데이터가 Producer 로부터 생성된다면 총 2개의 Log Segment 파일이 생성되는 구조입니다.또한 Producer 로부터 생성되는 Record 는 저마다 Timestamp 를 가지게 되며,log.segment.ms 가 1분이라면 1분을 기준으로 Log Segment 파일이 생성됩니다.Log Segment File 을 생성하기 위한 기준에 대해 대..
-
[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/kafka Connect 2024. 2. 18. 07:04
- 목차 들어가며.이번 글에서는 간단하게 Debezium MySQL Connector 을 활용하여 MySQL CDC 를 구현하는 방법에 대해서 알아보려고 합니다. MySQL Docker Container 실행하기.먼저 MySQL Docker Container 를 실행합니다.test_db 데이터베이스와 test_table 테이블을 생성합니다.그리고 Replication 을 수행할 user 인 kafkaconnect 를 생성합니다. cat /tmp/init.sqlcreate database test_db;use test_db;create table test_db.test_table (id int not null auto_increment, name varchar(32), PRIMARY KEY (id));i..