Apache Kafka로 시작

(2019 년 6 월 13 일)

Apache Kafka 란 무엇입니까?

Apache Kafka는 원래 분산 게시-구독 기반 추가 전용 메시징 플랫폼입니다. LinkedIn 에서 개발했으며 나중에 Apache 재단 .

(* 이미지는 미화 용입니다.)

사용 사례

  • 메시지
  • 로그 집계
  • 스트림 처리
  • 커밋 로그
  • 이벤트 소싱 등

작동 원리

Kafka는 pub-sub 모델에서 작동합니다. 따라서 소비자 / 소비자 그룹과 게시자가 있습니다.

생산자는 특정 주제에 데이터를 게시하고 주제를 구독하는 소비자는 데이터를 소비합니다. 여러 제작자가 동일한 주제에 게시 할 수 있지만 한 번에 한 소비자 만 주제의 데이터를 사용할 수 있습니다.

이제 하나만 있는지 물어볼 수 있습니다. 소비자는 한 번에 주제에서 소비 할 수 있으며 수천 개의 이벤트가 발생하는 경우이를 어떻게 확장합니까?

알겠습니다. 이 경우 확장 성을 위해 주제를 파티션으로 분할 할 수 있습니다.

주제를 분할 할 때 분할의 각 메시지에는 offset\_id / message\_id가 있습니다. 왼쪽 그림에서 우리는 3 개의 파티션을 만들었고 각 생산자는 특정 파티션에 이벤트를 보낼 것입니다. 그리고 소비자는 특정 파티션에서 읽습니다. 이제 300 개의 이벤트 / 초가 전송되는 경우 3 개로 분할되므로 각 파티션은 초당 100 개의 메시지를 갖게됩니다. 이러한 방식으로로드 밸런싱을 달성 할 수 있습니다. 파티션을 수행 할 때 Kafka는 파티션 수준 메시지 순서 만 확인합니다 . 파티셔닝을 통해 순서를 달성하려면 키 를 사용해야합니다.

이벤트가 증가하면 더 많은 파티션을 수행하고 더 많은 소비자를 추가하여로드 밸런싱을 확장하고 달성해야합니다. .

이벤트를 받으면 Kafka에 로그를 커밋해야하므로 Kafka는 이벤트가 처리되었음을 인식하고 Kafka는 다시 보내지 않습니다. 앱을 처리하는 도중에 Kafka가 해당 이벤트를 다시 전송하여 처리합니다.

복제 계수 :

복제 인자는 Kafka의 데이터가 다른 Kafka 브로커로 복제되는 방식입니다. 복제 계수 N = 3을 선택했다고 가정 해 보겠습니다. 데이터는 2 개의 추가 브로커로 복제됩니다. 따라서 Kafka는 N-1 브로커가 다운 되더라도 여전히 작동합니다. 데이터를 유지하기 위해 하나 이상의 브로커가 살아 있기 때문입니다.

Apache Zookeeper?

Apache Zookeeper는 분산 구성 서비스, 동기화를 제공하는 데 사용되는 계층 적 키-값 저장소에 대한 분산 시스템 용 중앙 집중식 서비스입니다. 대규모 분산 시스템을위한 서비스 및 이름 지정 레지스트리. Apache Kafka는 Zookeeper 없이는 작동하지 않습니다. Kafka 클러스터 관리 (브로커가 작동하거나 중지되는 경우, 새 주제가 생성 된 경우…)이 유형의 데이터는 Zookeeper를 통해 다른 Kafka 브로커와 동기화됩니다.

Spinup Kafka>

docker-compose up

소비자 (Golang)>

프로듀서 (Kotlin)>

결과>

Waiting for messages...Topic : users.notification
Partition : 0
Offset : 1
Value : hello

리소스 :

1. github.com/confluentinc/confluent-kafka-go
2. compile group: "io.opentracing.contrib", name: "opentracing-kafka-client", version: "0.1.2"

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다