Kafka处理的生产者-消费者处理模式

时间:2019-01-03 09:41:24

标签: apache-kafka

我正在实现类似于下图的流传输管道:

*K-topic1* ---> processor1 ---> *K-topic2* ---> processor2 --> 
*K-topic3* ---> processor3 --> *K-topic4*

K-topic组件代表Kafka主题和处理器组件代码(Python / Java)。

对于处理器组件,其目的是从主题读取/消费数据,对其进行一些处理/ ETL,并将结果持久存储到链中的下一个主题以及诸如S3之类的持久性存储中。

我对设计方法有疑问。

按照我的看法,每个处理器组件都应该封装消费者和生产者功能。

最好的方法是拥有一个可能包含KafkaConsumer和KafkaProducer类的Processor模块/类吗?迄今为止,我看到的大多数示例都具有独立的使用者和生产者组件,它们分别运行,并且需要运行两倍的组件数量 而不是将生产者和消费者封装在每个Processor对象中。

欢迎任何建议/参考。

这个问题不同于

Designing a component both producer and consumer in Kafka

该问题专门提到使用Samza,而在这里不是这种情况。

1 个答案:

答案 0 :(得分:1)

  

目的是从主题中读取/消费数据,对其进行一些处理/ ETL,并将结果保留到链中的下一个主题

这正是Kafka Streams和/或KSQL的优势。您可以使用Processor API,但是从您的描述来看,我认为您只需要Streams DSL API

  

将结果持久化到链中的下一个主题以及诸如S3之类的持久存储。

根据上述主题,您可以使用Kafka Connect Sink将主题数据导入这些其他外部系统。无需编写使用者来为您执行此操作。