Kafka
-
[Kafka 101] bootstrap.servers 설정에 관하여 (Inside of bootstrap.server)개발자 라이프/카프카 2020. 4. 12. 19:03
들어가며 카프카 클라이언트, 그 중 대표적으로 프로듀서와 컨슈머는 메시지를 발행, 구독하기 위해 필수로 bootstrap.servers 설정을 합니다. 하지만 이 bootstrap.servers 설정은 카프카 클러스터를 구성하는 전체 브로커에 대해 설정해주지 않아도 클라이언트는 각자의 브로커 자원 위치를 알고 작업을 수행합니다. 이번 글은 클라이언트의 bootstrap.servers 설정과 이 설정에 관한 내부 작동에 관하여 설명합니다. 카프카의 구조적인 특징 카프카 클러스터의 가장 큰 특징은 각 브로커들이 클러스터 전체 데이터의 일부분을 가지고 있다는 것입니다. 이는 카프카의 구성 요소인 토픽, 파티션과 깊은 연관이 있습니다. 논리적인 단위인 토픽은 메시지 저장의 단위인 파티션으로 쪼개져 구성되고, 파..
-
[Kafka 101] 카프카 브로커 (Kafka Broker)개발자 라이프/카프카 2020. 3. 29. 23:13
들어가며 카프카는 메시지를 생산하는 프로듀서와 소비하는 컨슈머, 그리고 그 사이에서 메시지를 저장, 전달하는 브로커(Broker)로 구성됩니다. 이번 글은 카프카의 중추인 브로커에 대해 전반적으로 설명합니다. 이 글은 카프카의 토픽, 파티션에 관한 지식을 바탕으로 합니다. 따라서 관련된 지식이 부족한 독자분은 이전 글([Kafka 101] 카프카 메시지와 토픽과 파티션)을 먼저 읽어주시길 바랍니다. 1. 카프카 브로커 카프카 브로커는 일반적으로 '카프카'라고 불리는 시스템을 말합니다. 프로듀서와 컨슈머는 별도의 애플리케이션으로 구성되는 반면, 브로커는 카프카 자체이기 때문입니다. 따라서 '카프카를 구성한다' 혹은 '카프카를 통해 메시지를 전달한다'에서 카프카는 브로커를 의미합니다. 2. 카프카 (브로커)..
-
[Kafka 101] 카프카 프로듀서 (Kafka Producer)개발자 라이프/카프카 2020. 3. 15. 15:45
들어가며 카프카는 메시지를 생산, 발송하는 프로듀서(Producer)와 메시지를 소비, 수신하는 컨슈머(Consumer), 그리고 프로듀서와 컨슈머 사이에서 메시지를 중개하는 브로커(Broker)로 구성됩니다. 이번 글은 메시지 흐름의 시작인 프로듀서에 대해 전반적으로 설명합니다. 카프카 프로듀서 프로듀서는 보통 카프카 프로듀서 API와 그것으로 구성된 애플리케이션을 말합니다. 그리고 프로듀서는 브로커에 특정 토픽(혹은 파티션 영역까지)을 지정하여 메시지를 전달하는 역할을 담당합니다. 프로듀서를 통해 전달되는 메시지의 구조는 다음과 같습니다. 토픽 (Topic) 토픽 중 특정 파티션 위치 (Partition) 메시지 생성 시간 (Timestamp) 메시지 키 (Key) 메시지 값 (Value) 프로듀서 ..
-
[Kafka 개발] 큰 사이즈의 메시지를 발행-소비하는 방법에 관한 예제 (How to Pub-Sub the large size message like a image)개발자 라이프/카프카 2020. 2. 28. 19:57
들어가며 카프카는 메시지 발행-소비에 있어 한번에 요청하는 용량을 정할 수 있습니다. 프로듀서의 경우 `max.request.size`로 단일 send 요청의 크기를 정하고, 컨슈머의 경우 `fetch.max.bytes`로 단일 fetch 요청의 최대 크기를 정할 수 있습니다. 만약 단일 메시지의 크기가 이 설정들보다 클 경우 메시지를 Pub-Sub할 수 없습니다. 또한, 설정 값을 증가시켜 발행-소비를 가능하게 하더라도, 메시지 크기가 어느 정도에 이르면 성능이 하락하게 됩니다. 이때 우리는 메시지를 쪼개서 보내는 방법을 생각할 수 있습니다. 이번 글은 단일 요청에 대한 설정보다 메시지 크기가 큰 경우, 메시지 내용을 쪼개서 보내는 방법에 관하여 작성된 예제 코드를 설명합니다. 예제 코드는 깃헙에서 확..
-
[Kafka 101] 카프카 메시지와 토픽과 파티션 (Kafka Message, Topic and Partition)개발자 라이프/카프카 2020. 2. 25. 16:03
들어가며 카프카 브로커는 프로듀서로부터 메시지를 전달받고, 다시 이를 컨슈머로 전달하는 역할을 담당합니다. 이번 글은 카프카를 통해 흘러가는 메시지에 대해 알아보고, 나아가 카프카의 요소인 토픽과 파티션에 대해 개념적으로 살펴봅니다. 카프카의 메시지 카프카의 메시지는 Key(키)와 Value(값)로 구성됩니다. 먼저, 메시지의 키는 해당 메시지가 카프카 브로커 내부에 저장될 때, 저장되는 위치와 관련된 요소입니다. 프로듀서가 메시지를 브로커로 전달할 때, 프로듀서 내부의 파티셔너(Partitioner)가 저장 위치를 결정하는데, 이때 키의 값을 이용하여 연산하고 그 결과에 따라 저장되는 위치를 결정합니다. 메시지의 값은 메시지가 전달하고자 하는 내용물을 의미합니다. 값은 단순한 문자열이 될 수도 있고, ..
-
카프카 운영 - 컨슈머의 오프셋 정보 변경하기개발자 라이프/카프카 2020. 1. 14. 21:40
들어가며 프로듀서가 메세지를 발행하는 과정에서 에러가 발생하여, 컨슈머가 해당 메세지를 소비하지 못하고 Hang이 걸리는 경우가 있다(고승범님 글 참조). 이러한 경우 컨슈머의 오프셋 정보를 강제로 변경할 필요가 있다. 이 글에서는 브로커 CLI 환경에서 오프셋 정보를 변경하는 방법에 대해 살펴본다. 오프셋 정보 변경하기 메세지 발행/구독 프로듀서에 메세지 발행 # 발행할 메세지 입력 /usr/bin/kafka-console-producer --broker-list kafka-server-host:9092 --topic donald-offset-update > ... 컨슈머에서 메세지 구독 (-> 오프셋 최신화) # 브로커에 쌓인 메세지 구독 /usr/bin/kafka-console-consumer --..
-
Kafka Streams State개발자 라이프/카프카 2020. 1. 14. 21:27
들어가며 카프카 스트림즈에 대한 개발 도중 아래와 같은 로그를 확인했습니다. 2019-12-09 17:22:50.108 INFO 51383 --- [-StreamThread-1] o.a.k.clients.consumer.KafkaConsumer : [Consumer clientId=privacyMaskingStream-b09c662d-26ce-4a51-969f-3372161deb7c-StreamThread-1-restore-consumer, groupId=null] Unsubscribed all topics or patterns and assigned partitions 2019-12-09 17:22:50.108 INFO 51383 --- [-StreamThread-1] o.a.k.clients.cons..
-
로컬에 주키퍼, 카프카 설치하기 (Standalone)개발자 라이프/카프카 2020. 1. 14. 21:04
들어가며 이번 글은 주키퍼와 카프카를 로컬에 설치하는 방법에 대해 알아봅니다. 로컬에 설치하기 때문에 주키퍼와 카프카 모두 standalone 방식으로 구성합니다. 로컬에서 개발 환경을 구성하고 싶으신 분들은 참고하시면 되겠습니다. :) 또한 설치하는 주키퍼와 카프카의 설정은 최소 설정입니다. 혹여나 커스텀한 설정이 필요하신 분은 설정 파일을 별도로 수정하시면 됩니다. 기본적인 것들 Java 기존 설치 확인 javac -version OpenJdk 설치 sudo yum install java-1.8.0-openjdk-devel.x86_64 -y 정상 설치 확인 javac -version wget 기존 설치 확인 yum list installed | grep wget 설치 sudo yum install w..