用于事件发布的 Kafka 与 JMS

Kafka vs JMS for event publishing

在我们的场景中,我们有一组微服务,它们通过发送事件消息与其他服务进行交互。我们预计在高峰期每天有数百万条消息。每条消息都针对一种或多种类型的听众。 我们的要求如下:

  1. 零消息丢失。
  2. 能够动态注册特定的多个侦听器 键入以增加吞吐量。
  3. 当消息被发送时,不能保证监听器是存活的 已派遣。

我们考虑了 2 个选项:

  1. 将每条消息发送到 JMS 主队列,然后该队列的侦听器将根据消息内容将消息路由到特定队列,然后目标服务将侦听这些特定队列。
  2. 按消息类型向 Kafka 主题发送消息,然后目标服务将订阅相关主题并使用消息。

为此目的使用 JMSKafka 的优缺点是什么?

您的第一个要求是 "zero lost messages"。但是,如果您想要发布-订阅语义(即 JMS 中的主题),但在发送消息时不能保证侦听器处于活动状态,那么 JMS 是一个非启动器,因为这些消息将被简单地丢弃(即丢失)。

我建议使用 Kafka,因为它具有容错机制,即使某些消息丢失或未被任何侦听器捕获,您也可以轻松地从 Kafka 集群中检索它。

除此之外,您还可以轻松地在组中添加新的侦听器/侦听器,kafka 和 zookeeper 将很好地管理它。

总而言之,Kafka 是一种分布式发布-订阅消息传递系统,旨在快速、可扩展且持久。与许多发布-订阅消息系统一样,Kafka 在主题中维护消息提要。生产者向主题写入数据,消费者从主题读取数据。

集成起来非常容易。