2017-01-18 33 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来达到这个目的。 –