2

问题

我们有一个多数据中心的 activeMQ 设置,每个 HA 对都有 NFS,而且似乎 activeMQ 不是真正可扩展的,并且不能很好地解决 NFS 问题。(我们使用的是 5.7)

可能的解决方案

搬到卡夫卡

要求

  • 我们需要点对点和发布/订阅功能
  • 消息优先级(我知道 kafka 没有提供开箱即用的功能,但我们这边有一个解决方法)

问题

这对 Kafka 是否可行(不一定是开箱即用的,但需要一些客户端调整)?如果不是,那么您会建议什么其他技术?它不一定是 JMS,但它需要具有可扩展性和可靠性(并且它需要与 NFS 配合得很好)

4

4 回答 4

1

我们需要点对点和发布/订阅功能

卡夫卡做到了,在这里分享了我的发现

消息优先级

有点混淆你到底是什么意思,但是如果你想从特定偏移量消费,那么低级或简单消费者 API 提供了优先级。它还支持重新提交消息

于 2013-08-30T11:19:23.963 回答
0

Kafka 通过用户组概念提供点对点和发布订阅使用模式。没有直接支持的是选择器、优先级。但是您有可能跨分区分发消息,因此您可以例如根据优先级将消息分发到分区。您还可以免费获得受保留策略限制的消息持久性(核心原则之一)。kafka 中的每条消息本质上都是键值对。Key 在分区和日志压缩方面有一些特定的语义。在传统的消息传递系统中,您可以使用可用于路由等的自定义标头。以下文章试图对此进行总结。

于 2016-11-03T21:15:16.387 回答
0

在您的情况下,我将使用 Kafka,每个主题有 1 个分区,每个消息优先级有单独的主题,解决订阅者端的交付优先级。

于 2016-04-24T07:04:22.690 回答
0

对于消息的点对点传递(单个生产者,单个消费者),您可以将分区数配置为 1。生产者将在此主题和分区上发布消息,单个消费者将从该主题和分区中读取。在 ActiveMQ 术语中,主题等同于您的队列。

如果要添加消息优先级,我会使用较低级别的Kafka客户端,然后您可以增加分区数量(每个分区用于不同优先级的消息),并让消费者首先从最高优先级主题中获取消息,如果不存在消息,它将从下一个优先级较低的主题中获取。

于 2016-04-12T21:44:05.980 回答