设计 Kafka 主题 - 许多主题与一个大主题

use*_*075 9 messaging distributed-computing message-queue apache-kafka kafka-producer-api

考虑一系列不同的事件,推荐的方法是

  • 一个包含所有事件的大主题
  • 不同类型事件的多个主题

哪个选项会更好?

我知道消息不在主题的同一分区中意味着没有顺序保证,但是在做出此决定时还需要考虑其他因素吗?

Mat*_*Sax 5

主题是逻辑抽象,应包含相同类型的消息。比方说,您监视一个网站并捕获点击流事件,另一方面您有一个数据库,将其更改填充到更改日志主题中。您应该有两个不同的主题,因为点击流事件与您的数据库变更日志无关。

这有多个优点:

  • 您的数据将具有不同的格式,并且您将需要不同的(反)序列化器来写入读取数据(使用单个主题,您将需要混合序列化器,并且在读取数据时不会获得类型安全)
  • 您将拥有不同的使用者应用程序,其中一个应用程序可能仅对点击流事件感兴趣,而第二个应用程序仅对数据库更改日志感兴趣,第三个应用程序对两者都感兴趣。如果你有多个主题,应用程序一和二只订阅他们感兴趣的主题——如果你有一个主题,应用程序一和二需要阅读所有内容并过滤他们不感兴趣的内容,以增加代理、网络、客户端可以加载吗