Web/Kafka

[kafka] 카프카 관련 라이브러리 or API

MarrRang 2021. 3. 20. 16:26
카프카를 하고 싶은데 너무 귀찮잖아..! 편하게 쓰고 싶다!

실사용에 앞서서 자주 사용하는 라이브러리나 API를 알아봐야겠다고 생각했습니다.

 

1. Kafka Client

Kafka 구조에서 서버와 Application 사이에서 API로서 사용할 수 있는 Kafka Client입니다.

  • Java 외 3rd party library를 제공합니다. (Python, C++ 등)
  • broker 버전과 client 버전의 호환성 확인 필요

<참조. blog.voidmainvoid.net/193>

Kafka broker 버젼 Java client 호환성 Kafka stream 호환성 Kafka Connect 호환성
 0.10.0 0.10.1을 제외 모든 버전 가능  0.10.0 버젼만 가능 0.10.1을 제외 모든 버전 가능 
 0.10.1 모든 버전 가능 모든 버전 가능 0.10.1 이하 버젼 가능
 0.10.2 모든 버전 가능 모든 버전 가능 모든 버전 가능
0.11.0 모든 버전 가능 모든 버전 가능 모든 버전 가능
1.0.0 모든 버전 가능 모든 버전 가능 모든 버전 가능

<Dependency>

<dependency>
	<groupId>org.apache.kafka</groupId>
	<artifactId>kafka-clients</artifactId>
	<version>2.7.0</version>
</dependency>

 

 

2. Kafka Streams API

Kafka Streams API는 카프카에 저장된 데이터를 처리하고 분석하기 위해 개발된 클라이언트 라이브러리 입니다.

  • Apache Kafka 이외에 dependency에 의존성이 없어서 확장이 용이하다.
  • 메세지의 순서를 보장할 수 있고 fault-tolerant 로컬 상태 저장소를 지원합니다.

2.1. Stream Processing Topology

Kafka Streams는 스트림 프로세스들이 연결되어 토폴로지(Topology)를 구성합니다.

 

<용어 정리>

  • Stream : 이름 그대로 흐름의 의미를 가지고 있으며 Streams API에서 사용되는 추상화입니다. 토폴로지에서 전달되는 데이터 세트를 의미합니다. Stream에 기록되는 데이터 단위는 Key-Value 형태를 띄고 있습니다.
  • Stream processing application : Kafka Stream Client를 사용하는 Application입니다. 하나 이상의 토폴로지를 처리하는 로직을 의미합니다.
  • Stream Processor : 토폴로지를 이루는 하나의 노드를 의미합니다.

<Processor Topology 종류>

  • Source Processor : 토폴로지의 시작. 상위로 연결된 프로세서가 없는 Stream Processor를 의미합니다. Kafka와 연결된 프로세서이며 Kafka에서 데이터 레코드를 읽어서 하위 Stream Processor에게 전달합니다.
  • Sink Processor : 토폴로지의 마지막. 하위에 연결된 프로세서가 없는 Stream Processor를 의미합니다. 상위 프로세서로부터 데이터를 받아서 Kafka 토픽으로 Produce해서 저장합니다.

<https://ooeunz.tistory.com/137 참조>

 

3. Burrow

Kafka를 모니터링하는 Tool로써 활용되는 consumer lag monitoring tool입니다.

Kafka의 Consumer의 지연을 감지하는 용도로 주로 사용됩니다.

 

Kafka Consumer V0.9 이상부터 offset 정보를 _consumer_offsets 토픽에 produce 합니다.

해당 토픽을 consume하여 사용하면 어떤 Consumer group id가 어느 offset까지 처리했는지 알 수 있습니다.

 

Burrow는 _consumer_offsets 토픽을 consume 해서 다양한 정보를 가공 및 저장하고 HTTP로 조회가 가능하도록 만든 Tool입니다.

 

<Burrow 모듈 정리>

  • Clusters : 파티션으로부터 offset에 대한 정보를 가져오는 Kafka Client를 실행
  • Consumers : Kafka(or Zookeeper)로 부터 consumer group의 정보를 가져옴
  • Storage : Burrow의 모든 정보 저장
  • Notifier : 원하는 방식(email, http 등)을 통해 알림 기능 제공
  • HTTP server : cluster와 consumer 정보를 http request로 제공
  • Evaluator : Consumer group의 status가 어떤지 판단. 판단 기준은 cousumer lag evaluation rules를 따름
반응형