2017-01-18 55 views
0

我有兩個Kafka流,requestevent每個分區在一個公共字段requestId(最後兩位數字)。我想加入這兩個流並寫入HDFS或本地filesystem?如何編寫一個高效的consumer,在加入兩個streams時只考慮相關的partitions如何加入兩個Kafka流,每個都有多個分割?

回答

2

您應該使用Kafka's Streams API,Apache Kafka的流處理庫,而不是手寫消費者。要將數據寫入HDFS,您應該使用Kafka Connect。

對於做加盟,看看這樣一個問題:How to manage Kafka KStream to Kstream windowed join?

還檢查了匯合的文檔關於Kafka StreamsKafka Connect上手。如果您有進一步的問題,請開始後續問題(閱讀手冊後:))

+0

謝謝。看起來正是我需要的東西! – Rubbal

+0

@ matthias-j-sax我閱讀手冊,這兩個庫僅與Confluent的版本兼容(感謝rationalSring指出它)。使用融合的版本有什麼缺點嗎? – Rubbal

+1

這是不正確的。合流,只需重新包裝Apache Kafka,並且與ASF版本100%兼容。只有HDFS連接器不是Apache Kafka的一部分,但您可以從confluent.io/product/connectors下載並使用ASF版本。由於Confluent提供Confluent開源代碼,並且代碼與ASF Kafka 100%兼容,所以使用Confluent的優惠沒有缺點 - 只有當您獲得更大的軟件堆棧時纔有優勢。 –

0

卡夫卡流與Kafka連接(HDFS)是一個簡單的解決方案。但是,必須指出的是,Kafka Connect的HDFS連接器僅適用於Confluent的Kafka版本。 Apache Kafka Connect只附帶一個文件編寫器,而不是HDFS編寫器。

+0

如何使用Flume從Kafka寫入HDFS? – Rubbal

+1

這並非完全正確:即使您使用vanilla Apache Kafka,您也可以下載Confluent的HDFS連接器https://www.confluent.io/product/connectors/並使用它。此外,沒有「合流版卡夫卡」 - 它只是重新包裝,但與Apache Kafka 100%兼容(它可能包含額外的bug修復 - 但很少發生)。 –

+0

@Rubbal,我沒有使用flume來達到這個目的。 –