일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- JDK
- 비동기
- JVM
- swagger
- VictoriaMetrics
- API문서
- broker
- spring
- Zookeeper
- tsdb
- Reassign
- webflux
- java
- NoClassDefFoundError
- Brooklin
- raft
- ExecutableJar
- Reactive
- kafka
- OpenJDK
- Rebalance
- Vmalert
- OFFSET
- Vmagent
- ProjectLoom
- Mirror
- restdocs
- consumer
- springboot
- Today
- Total
목록 kafka (10)
거북이 developer
💬 Kafka 와 Zookeeper 의 관계? 떼려야 뗄 수 없는 관계다. Kafka 는 Zookeeper 를 통해 필요한 Metadata 를 안전하게 저장하고 Cluster 운영을 위한 리더 및 파티션 오너를 선출하고 있다. 이러한 관계로 Kafka 를 운영하기 위해서는 반드시 Zookeeper 가 구축되어야 하고 운영단계에서는 Kafka 가 사용하는 Zookeeper 를 다른 솔루션과 함께 사용하지 말라고 권장하고 있다. 💬 Kafka 는 왜 Zookeeper 와 헤어지려고 하는가? 다음과 같은 몇가지 이유가 있다. 1️⃣ Kafka 를 쓰려면 Zookeeper 도 같이 알아야 한다. - 처음 Kafka 를 배우는 입장에서는 동시에 2가지의 솔루션을 배워야 한다는 것에 진입장벽을 느낄 수 있다. - ..
최근에 흥미로웠던 LinkedIn 에서 Brooklin 을 활용한 Mirror Maker 를 소개하고자 한다. 현재 Kafka Cluster 간 Message 를 Mirroring 하는 방법은 다양하다. 대표적으로 Mirror Maker 라는 오픈소스가 있고(이건 v2 가 release 되었다), Kafka Connector 나 오늘 소개할 Brooklin, 그리고 직접 Consumer 와 Producer 를 구현해서 만들수도 있다. 필자가 Kafka Mirroring 과 관련된 모든 오픈소스를 확인해본건 아니지만, 적어도 위에서 언급한 방법들에 대해서만 한정하자면 모두 공통적으로 Source Cluster 에서 message 를 Consuming 하고, 이를 Target Cluster 로 Publish..
1. Zookeeper 구축 1) Zookeeper 설치 https://archive.apache.org/dist/zookeeper/ 경로에서 원하는 버전의 zookeeper 를 다운받는다. 다운받은 zookeeper 압축파일을 원하는 경로에 해제한다. 2) Zookeeper 설정 zookeeper configuration 을 참고하여 zookeeper 설정 파일을 정의한다. cluster 로 구축해야하므로 설정파일에 zookeeper 로 구축할 각 서버정보를 아래와 같이 정의한다. server.{zookeeper-1.serverId}={zookeeper-host1}:{follower-port}:{leader-election-port} server.{zookeeper-2.serverId}={zookeep..
필요한 상황 Consumer 에 이슈가 발생해서 특정 시점으로 offset 을 돌려서 다시 읽고 싶어요. 지금까지 읽었던 메세지를 다시 읽게 하고 싶을 경우? 사전 확인 사항 - offset 을 어디까지로 reset 할지 확인 특정 offset 으로 reset 을 하고 싶다면 Consumer 에서 남긴 로그를 통해 각 파티션별 reset 하고자 하는 offset 값을 알아야 한다. 특정 시점으로 reset 을 하고 싶다면 reset 하고자 하는 시점을 'yyyy-MM-ddTHH:mm:SS.sss' 포맷으로 정의한다. - 경우에 따라 메세지 처리가 중복으로 발생할 수 있는데 이때 이슈가 없는지 확인한다. 이슈가 없다면 상관없지만 이슈가 있을 경우 Consumer 로직에서 중복처리를 하지 않도록 수정작업이 ..
필요한 상황 신규 broker 장비 추가 broker 장비 이전 특정 토픽을 특정 노드에서만 운영하고 싶을 때 실행 방법 kafka bin 디렉토리 하위에 있는 kafka-reassign-partitions.sh 스크립트를 사용 이동시킬 topic 이 무엇인지 json 포맷으로 정의 예) example-to-move.json {"topics":[{"topic": "example1"},{"topic": "example2"},{"topic": "example3"}],"version":1} --topics-to-move-json-file 옵션으로 위에서 생성한 json 파일을 지정하고, --generate 옵션을 통해 이동시킬 broker 에 대한 파티션 설정값을 자동으로 생성 $ bin/kafka-reass..
내용 정리 Kafka Broker 로그에 간혹가다 아래와 같은 ERROR 로그가 발생한다. ERROR [ReplicaManager broker=23] Error processing append operation on partition test-8 (kafka.server.ReplicaManager) org.apache.kafka.common.errors.OutOfOrderSequenceException: Invalid sequence number for new epoch: 3 (request epoch), 4 (seq. number) ERROR [ReplicaManager broker=22] Error processing append operation on partition test-55 (kafka.s..
이슈 producer 가 메세지를 일정 간격으로 전송(500ms) consumer 설정 중 fetch.min.bytes 를 1로 설정(데이터가 있으면 즉시 받도록 최소로 설정) 하고 fetch.max.wait.ms 를 default(500ms)로 설정했을 때, consumer 가 저장된 메세지를 읽어들이는데 지연시간이 발생.(메세지가 broker 에 도착시간은 12시 0분 0초 0ms 인데 해당 메세지를 컨슈머가 읽은 시간은 12시 0분 0초 300ms) fetch.max.wait.ms 를 100ms 로 설정하였을 경우 지연시간이 줄어듬 원인 kafka documentation 에 정리된 설정값의 설명을 보면 fetch.min.bytes 를 1로 설정할 경우 데이터가 들어왔을 때 즉시 응답을 줄거로 예상..
Multi-Threaded Message Consumption with the Apache Kafka Consumer 토픽에서 레코드는 파티션이라는 더 작은 단위로 묶인다. 이 단위는 결과의 정확성을 훼손하지 않고 독립적으로 처리할 수 있으며, 병렬 처리를 위한 토대가 된다. 병렬 처리는 일반적으로 스케일링을 통해서 가능하다. 같은 그룹 내에 여러 컨슈머를 두고, 각 컨슈머는 토픽 파티션들의 서브셋으로 부터 데이터를 가져가 처리하고 단일 쓰레드에서 실행된다. 대부분의 유즈 케이스에서 단일 쓰레드에서 메시지를 읽고 처리하는 것은 문제가 없다. 따라서, 쓰레드당 컨슈머 모델은 아파치 카프카 컨슈머에서 흔히 사용된다. I/O 연산이 들어가지 않는 처리는 일반적으로 매우 빠르기 때문에, poll 루프도 잘 동작..