【发布时间】:2017-01-19 02:13:52
【问题描述】:
我有两个事件 PingData 和 OrderEvent(来自两个不同的生产者),它们都将对同一资源(数据库、缓存)进行一些修改
解决这个问题的理想方法是什么,我可以考虑以下两种可能性 1)单个主题和拓扑然后根据一些数据进行过滤 2)两个不同的主题和两个拓扑将执行一些操作
请用正确的方法指导我!
【问题讨论】:
标签: apache-kafka apache-storm kafka-consumer-api
我有两个事件 PingData 和 OrderEvent(来自两个不同的生产者),它们都将对同一资源(数据库、缓存)进行一些修改
解决这个问题的理想方法是什么,我可以考虑以下两种可能性 1)单个主题和拓扑然后根据一些数据进行过滤 2)两个不同的主题和两个拓扑将执行一些操作
请用正确的方法指导我!
【问题讨论】:
标签: apache-kafka apache-storm kafka-consumer-api
这里真正的问题是您的两个来源之间的相关性如何。你想对这两个数据流有严格的排序保证吗?如果是这样,请仅使用一个分区启动一个主题,并让消费者从中消费。
现在,这不是一个非常好的设置,因为很少/没有并行性。如果你的数据有一些基于键的分区,你可以散列它,然后每个主题有多个分区。现在,您将获得单个分区的排序保证,但跨分区没有这样的保证。但如果它们在逻辑上是独立的实体,我相信你应该没问题。
如果您正在生成的两个数据集之间没有依赖关系(我的意思是没有严格的排序约束),您最好通过创建 2 个主题将其分成 2 个不同的逻辑命名空间。
要记住的关键点是“主题只是Kafka中的一个逻辑实体”。在性能方面,单个主题有 2 个分区与 2 个主题每个有 1 个分区是一样的。
因此,很大程度上取决于您希望如何设计系统以及两组之间的关系。
【讨论】: