【发布时间】:2017-04-03 22:03:11
【问题描述】:
考虑到一系列不同的事件,推荐的方式是
- 一个包含所有事件的大主题
- 针对不同类型活动的多个主题
哪个选项更好?
我了解消息不在主题的同一分区中,这意味着没有顺序保证,但是在进行此操作时是否有任何需要考虑的其他因素决定?
【问题讨论】:
标签: apache-kafka message-queue messaging distributed-computing kafka-producer-api
考虑到一系列不同的事件,推荐的方式是
哪个选项更好?
我了解消息不在主题的同一分区中,这意味着没有顺序保证,但是在进行此操作时是否有任何需要考虑的其他因素决定?
【问题讨论】:
标签: apache-kafka message-queue messaging distributed-computing kafka-producer-api
主题是一个逻辑抽象,应该包含相同类型的消息。假设您监控一个网站并捕获点击流事件,另一方面,您有一个将其更改填充到更改日志主题中的数据库。您应该有两个不同的主题,因为点击流事件与您的数据库更改日志无关。
这有很多好处:
【讨论】:
正如@Matthias J. Sax 之前所说,这里没有金子弹。但我们必须考虑不同的主题。
护发素:订购交货
如果您的应用程序需要保证订单交付,您只需要使用一个主题,并为需要保证它的消息加上相同的键。
如果订购不是强制性的,游戏开始......
所有消息的架构都相同吗?
消费者会对相同类型的不同事件感兴趣吗?
消费者方面会发生什么?我们是在实现、可维护性、错误处理方面降低还是增加复杂性...?
水平可扩展性对我们来说重要吗?更多的主题通常意味着更多的可用分区,这意味着更多的水平可扩展性能力。它还允许在代理端进行更准确的可扩展性配置,因为我们可以选择每个事件类型增加多少分区。或者在消费者方面,每种事件类型有多少消费者站起来。
按消息类型并行消费有意义吗? ...
从技术上讲,如果我们允许消费者微调要消费的那些类型的事件,我们可能会减少从代理向消费者发送不需要的消息所需的网络带宽,以及所有这些事件的反序列化次数(cpu使用,这使得随着时间的推移更多的免费资源,能源成本降低......)。
另外值得记住的是,在不同的主题中拆分不同类型的消息并不意味着必须与不同的 Kafka 消费者一起使用它们,因为它们允许同时来自不同主题的消费。
嗯,这个问题没有明确的答案,但我觉得对于 Kafka,因为有多个功能,如果不需要按顺序交付,我们应该将每种类型的消息拆分到不同的主题中。
【讨论】: