用于事件发布的 Kafka 与 JMS
Kafka vs JMS for event publishing
在我们的场景中,我们有一组微服务,它们通过发送事件消息与其他服务进行交互。我们预计在高峰期每天有数百万条消息。每条消息都针对一种或多种类型的听众。
我们的要求如下:
- 零消息丢失。
- 能够动态注册特定的多个侦听器
键入以增加吞吐量。
- 当消息被发送时,不能保证监听器是存活的
已派遣。
我们考虑了 2 个选项:
- 将每条消息发送到 JMS 主队列,然后该队列的侦听器将根据消息内容将消息路由到特定队列,然后目标服务将侦听这些特定队列。
- 按消息类型向 Kafka 主题发送消息,然后目标服务将订阅相关主题并使用消息。
为此目的使用 JMS 或 Kafka 的优缺点是什么?
您的第一个要求是 "zero lost messages"。但是,如果您想要发布-订阅语义(即 JMS 中的主题),但在发送消息时不能保证侦听器处于活动状态,那么 JMS 是一个非启动器,因为这些消息将被简单地丢弃(即丢失)。
我建议使用 Kafka,因为它具有容错机制,即使某些消息丢失或未被任何侦听器捕获,您也可以轻松地从 Kafka 集群中检索它。
除此之外,您还可以轻松地在组中添加新的侦听器/侦听器,kafka 和 zookeeper 将很好地管理它。
总而言之,Kafka 是一种分布式发布-订阅消息传递系统,旨在快速、可扩展且持久。与许多发布-订阅消息系统一样,Kafka 在主题中维护消息提要。生产者向主题写入数据,消费者从主题读取数据。
集成起来非常容易。
在我们的场景中,我们有一组微服务,它们通过发送事件消息与其他服务进行交互。我们预计在高峰期每天有数百万条消息。每条消息都针对一种或多种类型的听众。 我们的要求如下:
- 零消息丢失。
- 能够动态注册特定的多个侦听器 键入以增加吞吐量。
- 当消息被发送时,不能保证监听器是存活的 已派遣。
我们考虑了 2 个选项:
- 将每条消息发送到 JMS 主队列,然后该队列的侦听器将根据消息内容将消息路由到特定队列,然后目标服务将侦听这些特定队列。
- 按消息类型向 Kafka 主题发送消息,然后目标服务将订阅相关主题并使用消息。
为此目的使用 JMS 或 Kafka 的优缺点是什么?
您的第一个要求是 "zero lost messages"。但是,如果您想要发布-订阅语义(即 JMS 中的主题),但在发送消息时不能保证侦听器处于活动状态,那么 JMS 是一个非启动器,因为这些消息将被简单地丢弃(即丢失)。
我建议使用 Kafka,因为它具有容错机制,即使某些消息丢失或未被任何侦听器捕获,您也可以轻松地从 Kafka 集群中检索它。
除此之外,您还可以轻松地在组中添加新的侦听器/侦听器,kafka 和 zookeeper 将很好地管理它。
总而言之,Kafka 是一种分布式发布-订阅消息传递系统,旨在快速、可扩展且持久。与许多发布-订阅消息系统一样,Kafka 在主题中维护消息提要。生产者向主题写入数据,消费者从主题读取数据。
集成起来非常容易。