프로젝트/kafka
-
kafka 주키퍼가 필수가 아니다?프로젝트/kafka 2023. 8. 22. 00:01
개요 kafka를 docker로 구성해서 사용하다 보면 zookeeper도 같이 구성해서 사용하곤 했습니다. 하지만 zookeeper는 필수가 아니라는 이야기를 듣고 궁금하여 공부해보려 합니다. Zookeeper란 무엇인가? 쿠버네티스, 카프카 등의 분산 시스템에서는 분산된 시스템끼리 정보를 공유하기 위해 코디네이션 시스템이 필요하고 대표적인 오픈 소스로 Apache Zookeeper가 존재합니다. 공식문서에서는 고성능 코디네이션 시스템으로 소개하며, 이름, 설정 관리, 동기화, 그룹 관리, 리더 선출 등을 수행해 준다고 설명합니다. Kafka에서 Zookeeper가 필요없어졌다 Apache Kafka 2.8.0에 출시되면서 Apache Zookeeper의 의존성이 모두 제거되었습니다. Zookeeper..
-
kafka는 어떻게 고가용성을 유지할까?프로젝트/kafka 2023. 8. 21. 00:01
개요 kafka는 고가용성, 내결함성이 보장된다고 합니다. 고가용성 및 내결함성이란 시스템의 일부 구성 요소가 작동하지 않더라도 계속 작동할 수 있는 기능을 말합니다. 그러면 Kafka는 어떻게 고가용성을 유지할 수 있을까요? 핵심키워드인 kafka replication factor, leader & follower, ISR를 통해 알아보고자 합니다. Kafka replication factor kafka에서는 replication 수를 임의로 지정하여 topic을 만들 수 있습니다. replication-factor 옵션을 통해서 설정할 수 있습니다. replication-factor가 1일 때 topic1 그리고 topic2의 replication factor가 1인 경우입니다. broker1에만 저..
-
Kafka 파티션 증가/감소프로젝트/kafka 2023. 8. 12. 00:01
개요 Kafka의 파티션은 증가시킬 순 있지만 감소할 수 없기 때문에 주의 깊게 증가시켜야 한다는 이야기를 듣게 되었습니다. Kafka의 파티션은 왜 감소시킬 수 없는지 알아보고자 합니다. 그리고 파티션을 증가하면 어떤일이 일어나는지 알아보고자 합니다. Kafka Producer Load Balancing 클라이언트는 메시지를 어느 파티션에 게시할지 제어할 수 있습니다. 이때 로드밸런싱을 구현하여 무작위로 수행하거나, 시맨틱 파티셔닝 함수를 통해 수행될 수 있습니다. 시맨틱 파티셔닝이란 사용자가 키를 지정하는 경우 DefaultPartioner가 키에 대한 해시를 처리합니다. 반대로 사용자가 키를 지정하지 않은 경우에는 라운드로빈 스타일로 파티션을 사용하게 됩니다. key가 없으면 round robin ..
-
Kafka Consumer 성능 올리기프로젝트/kafka 2023. 8. 11. 00:01
개요 Kafka와 같은 Message Queue의 장점 중 하나로는 중간다리에 트래픽을 저장해 놓을 수 있기 때문에 서버가 필요한 만큼만 처리할 수 있습니다. 만약 Producer가 메시지를 생산해 내는 양에 비해 Consumer가 메시지를 처리하는 양이 너무 느린 경우는 어떻게 처리할 수 있을까요? 간단하게 Consumer의 개수를 그냥 늘리면 안 될까요? Producer는 10개의 메시지 발생, Consumer는 5초에 한 개씩 처리하는 구조 만들기 producer는 메시지를 한번 보낼 때 10번 보내기 @Component class KafkaProducer( private val kafkaTemplate: KafkaTemplate ) { fun send(topic: String) { repeat(1..
-
kafka Consumer 그룹 리밸런싱프로젝트/kafka 2023. 8. 8. 00:01
Kafka Consumer 그룹 리밸런싱이란? Kafka Consumer는 토픽의 각 파티션에 대해 메시지를 처리합니다. 하지만 특정 Consumer에 문제가 생겨 더 이상 메시지를 처리할 수 없다면, 파티션의 소유권은 다른 컨슈머에게 이관합니다. 이러한 작업을 리밸런싱이라 합니다. Kafka Consumer 그룹 리밸런싱은 언제 일어날까? 1. 일반적으로 애플리케이션을 배포하는 상황에서 컨슈머가 생성/삭제되는 과정이 일어나기 때문에 발생합니다. 2. 시간 내에 Poll 요청 실패 3. 컨슈머가 일정시간 내에 하트비트를 보내지 못하는 경우 리밸런싱이 발생하면 어떻게 될까? 컨슈머 그룹 전체 메시지 처리 중단(Stop The World) 메시지 중복 컨슈밍 메시지 손실 실제로 예전에 문자메시지를 발송하는 ..
-
kafka Dead Letter Queue(DLQ, DLT)프로젝트/kafka 2023. 8. 7. 00:01
개요 AWS SQS에서는 Dead Letter Queue(DLQ)를 손쉽게 제공하고 연결할 수 있도록 합니다. 메시지가 실패하는 경우 재처리를 몇 번 할지도 console에서 간편하게 설정할 수 있습니다. Kafka의 경우 메시지 처리에 실패하면 Dead Letter Queue(DLQ)를 어떻게 관리할 수 있을까요? Kafka에서는 DLQ대신 DLT라는 개념을 사용합니다. DLT는 Dead Letter Topic의 약자입니다. SQS DLQ에 대해서는 다음글을 참고해 주세요. https://junuuu.tistory.com/740 [AWS] SQS DLQ 설정하기 DLQ란 무엇인가? DLQ(Dead Letter Queue)는 소프트웨어 시스템에서 오류로 인해 처리할 수 없는 메시지를 임시로 저장하는 특수..
-
kafka 메시지 삭제 정책프로젝트/kafka 2023. 8. 6. 00:01
개요 kafak를 운영하면 메시지를 언제까지 보관해야 할까요? kafka의 cleanup policy, retention policy, delete policy, compact policy 등에 대해 알아보고자 합니다. Kafka의 데이터는 어떻게 저장될까? kafka는 파티션에 데이터를 저장합니다. 카프카를 설정하면 파티션이 저장될 디렉토리의 위치를 log.dirs 매개변수에 지정할 수 있습니다. Kafka는 다른 메시징 시스템과 달리 토픽의 메시지가 소비된 후 즉시 삭제하지 않습니다. 대신 각 토픽의 구성에 따라 허용되는 공간과 관리 방식이 결정됩니다. Kafka의 구조는 Cluster -> Broker -> Topic -> Partition -> Segment Segment의 구조 특정 오프셋이나..
-
Kafka 객체 SERIALIZER, DESERIALIZER프로젝트/kafka 2023. 8. 5. 00:01
개요 Kafka를 사용하다 보면 메시지를 Stirng이 아닌 객체(DTO)로 전송하고 싶을 수 있습니다. 이때 Producer, Consumer Config를 알아보겠습니다. 테스트하기 위한 환경 local에서 실행할 수 있는 SpringBootApplication consumer 1대, producer 1대 docker, AWS MSK등으로 구성한 kafka 인프라 TestDTO data class TestDto( val col1: String, val col2: String, ) @Configuration @EnableKafka class KafkaProducerConfig { @Value("\${spring.kafka.producer.bootstrap-servers}") private lateini..