我们可以在kafka中为相同的主题使用两种不同的拓扑

时间:2016-09-11 13:51:32

标签: apache-kafka apache-storm kafka-consumer-api

我有两个事件PingData和OrderEvent(来自两个不同的生产者),他们都将在同一资源(db,cache)上做一些修改

解决这个问题的理想方法是什么,我能够考虑以下两种可能性 1)单个主题和拓扑然后根据一些数据进行过滤 2)两个不同的主题和两个拓扑将执行一些操作

请指导我正确的方法!

1 个答案:

答案 0 :(得分:0)

这里真正的问题是你的两个来源之间是如何相互关联的。您想要在这两个数据流中获得严格的订购保证吗?如果是这样,只用一个分区开始一个单一主题,并让消费者从中消费。

现在,这不是一个非常神的设置,因为很少/没有并行性。如果您的数据具有一些基于密钥的分区,则可以对其进行哈希处理,然后为每个主题分配多个分区。现在,您将获得单个分区的订购保证,但跨分区没有此类保证。但如果它们在逻辑上是分开的实体,我相信你应该没事。

如果您正在生成的两个数据集之间没有依赖关系(我的意思是没有严格的排序约束),您应该通过创建2个主题将其理想地分成2个不同的逻辑命名空间。

要记住的关键点是“主题只是卡夫卡的一个逻辑实体”。在性能方面,具有2个分区的单个主题与2个主题相同,每个主题具有1个分区。

因此,很多因素取决于您希望如何设计系统以及两组之间的关系。