2016-09-21 1 views
3

이 질문은 후속 작업으로 Kafka Streams with lookup data on HDFS입니다. 카파 (Kafka) 스트림에 작은 사전 데이터를 결합해야합니다.Kafka Streams "map-side"사전 검색처럼 합치다

AFAIK, Kafka Stream 인스턴스는 항상 특정 주제의 파티션에서 작동합니다. 조회를 원할 경우 관련 레코드를 함께 가져 오기 위해 두 스트림을 조인 키로 다시 분할해야했습니다.

여러 조회 데이터를 검사해야하는 경우 여러 번 다시 분할하는 비용은 얼마입니까? 전체 조회 데이터 세트를 각 파티션에 보낼 수 없으므로 검색 주제에서 KTable을 빌드하면 모든 카프카 스트림 애플리케이션 인스턴스에서 전체 데이터 세트를 볼 수 있습니다. 따라서 KStream#transform() 메서드에서 조회를 수행 할 수 있습니다.이 메서드는 내가 가지고있는 조회 데이터가있는 로컬 RocksDB 저장소를 사용합니다.

나는 더 적합 할 것이다 옵션 궁금 해요 :

  • 이 주제의 각 파티션에 동일한 데이터 (전체 데이터 세트)를 삽입하고 KStream#transform에서 조회를 할. 주제가 너무 많으면 중복되는 데이터가 많지만 작은 데이터 세트의 경우 문제가되지 않습니다.

  • 룩업 (조인)을 수행 할 수 있도록 DSL API를 사용하여 두 스트림을 다시 분할 할 수 있습니다. 여기 성능에 미치는 영향은 무엇입니까?

답변

4

AFAIK는 카프카 스트림 인스턴스는 항상 화제의 특정 파티션에서 작동합니다. 조회를 원할 경우 관련 레코드를 함께 가져 오기 위해 조인 키에 대해 두 스트림을 다시 분할해야했습니다.

예, Apache Kafka 0.10.0 및 0.10.1의 경우 수행해야합니다.

여러 조회 데이터를 검사해야하는 경우 여러 번 다시 분할하는 비용은 얼마입니까? 전체 조회 데이터 세트를 각 파티션에 보낼 수 없으므로 조회 주제에서 KTable을 작성할 때 모든 Kafka Stream 애플리케이션 인스턴스에서 전체 데이터 세트를 볼 수 있습니다.

이러한 기능은 실제로 "글로벌 KTable"또는 "글로벌 상태"로 기술됩니다. 실제로 유용 할 것입니다. 우리는 이미 언제 추가 할 수 있는지에 대해 이미 논의하고 있습니다.

업데이트 Feb 28, 2017 : 글로벌 테이블을 둘러싼 첫 번째 기능은 Kafka 0.10.2와 함께 출시되었으며 여기에서 KStream-to-GlobalKTable 조인을 수행 할 수 있습니다.

룩업 (조인)을 수행 할 수 있도록 DSL API를 사용하여 두 스트림을 다시 분할 할 수 있습니다. 성능 측면에서의 의미는 무엇입니까?

이 의미는 주로 입력 데이터 (데이터 볼륨, 균일 한 데이터 분포와 비뚤어 짐 데이터 분포 등)의 특성에 따라 달라집니다.

+0

감사합니다. Michael! 나는 이미 카프카 스트림 내부를 점검하기 시작했는데 어떻게 그런 세계적인 상태를 유지할 수 있었는지 알 수 있었지만 어떤 제안이라도 좋을 것입니다. 아니면 아마 내 요구에 accoding rocksdb을 채우는 자신의 프로세서를 만들 수 있습니까? – Bruckwald

+1

지금은 맞춤 프로세서를 사용하는 것이 좋습니다. 그 안에는 관심있는 각 Kafka 주제의 모든 파티션을 완전히 읽는 "정상적인"Kafka 소비자 클라이언트를 사용할 수 있습니다 (위의 "전역 상태/테이블"아이디어 참조). 그리고 사용 사례에 따라 필요에 따라 진행할 수 있습니다 . –