Kafka의 키 / 값 쌍 기반 메시징의 목적은 무엇입니까? [닫은]


98

의 모든 예제카프카 | 생산자ProducerRecord의 키 / 값 쌍이 동일한 유형 (모든 예가 표시됨 <String,String>) 일뿐만 아니라 동일한 값인 것으로 표시 합니다 . 예를 들면 :

producer.send(new ProducerRecord<String, String>("someTopic", Integer.toString(i), Integer.toString(i)));

그러나 Kafka 문서에서 키 / 값 개념 (및 기본 목적 / 유틸리티)이 설명 된 위치를 찾을 수없는 것 같습니다. 전통적인 메시징 (ActiveMQ, RabbitMQ 등)에서 저는 항상 특정 주제 / 대기열 / 교환에서 메시지를 실행했습니다. 그러나 Kafka는 일반적인 'ole string 메시지 대신 키 / 값 쌍이 필요한 것으로 보이는 최초의 브로커입니다.

그래서 저는 묻습니다 : 생산자들에게 KV 쌍을 보내도록 요구하는 목적 / 유용성은 무엇입니까?

답변:


95

Kafka는 파티션으로 구성된 분산 로그 의 추상화를 사용합니다 . 로그를 파티션으로 분할하면 시스템을 확장 할 수 있습니다.

는 메시지가 추가되는 로그 내의 파티션을 결정하는 데 사용됩니다. 값은 메시지의 실제 페이로드입니다. 예제는 실제로 이와 관련하여 매우 "좋은"것이 아닙니다. 일반적으로 복잡한 유형을 값으로 사용하고 (튜플 유형 또는 JSON 또는 유사) 하나의 필드를 키로 추출합니다.

참조 : http://kafka.apache.org/intro#intro_topicshttp://kafka.apache.org/intro#intro_producers

일반적으로 키 및 / 또는 값도 일 수 있습니다 null. 키가 null임의 파티션이면 선택됩니다. 값이있는 경우 null있습니다 경우 특별한 "삭제"의미를 가지고 당신은 주제 (대한 로그 압축 대신 로그 보존 정책 있도록 http://kafka.apache.org/documentation#compaction을 ).


2
그리고 특히, 키도 함께 카프카의 스트리밍 API에 관련된 역할을 KStream하고 KTable- 참조 여기에 .
reim

12
사용하여 파티션을 결정할 있지만 이는 생산자의 기본 전략 일뿐입니다. 궁극적 으로 사용할 파티션을 선택하는 것은 생산자 입니다.
gvo

@gvo 키가 더 많이 사용됩니까?
leoconco

1
로그 압축 링크에 언급 된대로 키당 하나의 메시지 인스턴스 만 유지하는 데 사용할 수 있습니다. 다른 사용 사례에 대해서는 잘 모릅니다.
gvo

3
partition매개 변수 를 지정하면이 매개 변수가 사용되며 키는 "무시"됩니다 (또는 물론 키는 주제에 계속 기록됩니다). -이렇게하면 키가 있어도 사용자 정의 파티션을 가질 수 있습니다.
Matthias J. Sax

18

늦은 추가 ... 동일한 키에있는 모든 메시지가 동일한 파티션으로 이동하도록 키를 지정하는 것은 주제에 대한 소비자 그룹에 여러 소비자가있는 경우 메시지 처리의 적절한 순서를 위해 매우 중요합니다.

키가 없으면 동일한 키에있는 두 개의 메시지가 다른 파티션으로 이동하여 그룹의 다른 소비자가 순서없이 처리 할 수 ​​있습니다.


-2

또 다른 흥미로운 사용 사례

user_ids를 보내기 위해 Kafka 토픽의 key 속성을 사용할 수 있으며, 그런 다음 소비자를 연결하여 스트리밍 이벤트 (값 속성에 저장된 이벤트)를 가져올 수 있습니다. 이를 통해 기계 학습 모델에서 기능을 생성하기 위해 사용자 이벤트 시퀀스의 최대 기록을 처리 할 수 ​​있습니다.

나는 이것이 가능한지 알아 내야한다. 자세한 내용으로 내 답변을 계속 업데이트합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.