apache-kafka - 아파치 카프카



동적 파티션 수를 사용하여 카프카(kafka) 주제를 만들 수 있습니까? (1)

웹 사이트 사용자가 웹 로그 분석 서비스에 대한 페이지 방문 이벤트를 스트리밍하기 위해 kafka를 사용하고 있습니다. 각 이벤트에는 소비자에 대한 다음 세부 정보가 포함됩니다.

  • 사용자 ID
  • 사용자의 IP 주소

매우 높은 처리량이 필요하므로 파티션 키를 사용하여 주제를 userId-ipAddress 로 파티션하기로 결정했습니다. 즉

userId 1000 및 ip 10.0.0.1의 경우 이벤트에 파티션 키가 "1000-10.0.0.1"이됩니다.

이 유스 케이스에서는 파티션 키가 동적이므로 주제를 생성하는 동안 사전에 파티션 수를 지정하십시오. 동적 파티션 수를 사용하여 카프카에서 주제를 만들 수 있습니까?

이런 종류의 파티셔닝을 사용하는 것이 좋습니까? 아니면 다른 방법으로 달성 할 수 있습니까?


동적 파티션 수를 사용하여 카프카 (Kafka) 주제를 만들 수는 없습니다. 주제를 작성할 때 파티션 수를 지정해야합니다. 나중에 복제 도구를 사용하여 수동으로 변경할 수 있습니다.

하지만 왜 동적 파티션 수를 필요로하는지 이해하지 못합니다. 파티션 키는 파티션 수와 관련이 없습니다. 10 개의 파티션 또는 1000 개의 파티션으로 파티션 키를 사용할 수 있습니다. 카프카 (Kafka) 주제에 메시지를 보내면 카프카 (Kafka)는 그것을 특정 파티션으로 보내야합니다. 모든 파티션은 단순히 숫자 인 ID로 식별됩니다. Kafka는 다음과 같이 계산합니다.

partition_id = hash(partition_key) % number_of_partition

메시지를 partition_id partition_id 보냅니다. 파티션보다 훨씬 많은 사용자가 있다면 확인해야합니다. 추가 제안 사항 :

  • userId 를 파티션 키로 사용하십시오. 파티션 키의 일부로 IP 주소가 필요하지 않을 수도 있습니다. 그것은 무엇을 위해 좋은가? 일반적으로 단일 사용자의 모든 메시지가 단일 파티션으로 끝나야합니다. 파티션 키로 IP 주소를 사용하면 단일 사용자의 메시지가 여러 파티션으로 끝날 수 있습니다. 나는 당신의 유스 케이스를 모르지만 당신이 원하는 것이 아닌 일반적인 것이다.
  • 모든 메시지를 처리하는 데 필요한 파티션 수를 측정합니다. 그런 다음 10 배 더 많은 파티션을 만듭니다. 실제로 필요한 것보다 더 많은 파티션을 생성 할 수 있습니다. 카프카는 괜찮을 것이고 성능 벌칙은 없습니다. 카프카 클러스터에서 주제 / 파티션 수를 선택하는 방법을 참조하십시오 .

지금 당장 시스템의 모든 메시지를 처리 ​​할 수 ​​있어야합니다. 트래픽이 커지면 Kafka 중개인을 더 추가 할 수 있으며 복제 도구를 사용하여 파티션의 리더 / 복제본을 변경할 수 있습니다. 트래픽이 10 배 이상 증가하면 새 파티션을 만들어야합니다.





kafka-consumer-api