我正在评估一个项目的消息代理,无法找到apache kafka是否支持以下用例的明确答案:
在接收消息时具有附加属性以进行过滤的消息被推送到主题。这些附加属性可被视为每条消息的主键,以最简单的形式,它只是一个id属性(例如,(不规则地)生成测量数据的传感器的id)。
0到n个使用者从主题接收这些消息,最终在主键上进行筛选。
消息在接收时不会被消费,因此主题上的所有消费者都将接收推送给他们的所有消息,只要他们正在消费这些消息(即“在线”)。
当没有使用者从主题接收消息时,messagebroker至少会更新每个主键的消息的内部状态。
当使用者订阅一个主题时,它必须能够在开始时接收每个主键写入的最后一条消息,然后接收推送到队列中的所有新消息,最后由主键过滤。接收器应该能够以某种方式识别出,在开始时处于初始状态的所有消息都已收到。
Kafka是否支持这个用例,以及如何实现这一点?如果kafka无法提供此功能,那么还有哪些消息代理可以提供此功能?
1条答案
按热度按时间vh0rcniy1#
具有在接收消息时要过滤的附加属性的消息
您可以使用kafka流或ksql过滤消息。这个操作的输出将成为消费者阅读的新主题。
或者,您可以通过这个“id”字段执行主题分区,将其设置为kafka消息键,具体取决于该值的基数。
0到n个使用者从主题接收这些消息
是的,Kafka可以有n个消费者
消息在接收时不会被消耗
不清楚这意味着什么。”“消费”和“接受”是一回事。
只要主题的消费者正在消费,他们就会收到推送给他们的所有消息
信息不是“推送”给在线消费者的,而是
poll
-任何订阅的消费者都将看到它从其主题请求的消息:当没有使用者从主题接收消息时,MessageBroker至少会更新每个主键的消息的内部状态
Kafka没有主键。它有偏移量。如果主题没有使用者,那么偏移量将过期,代理将删除消息。消息内容本身永远不会被修改
当使用者订阅一个主题时,它必须能够在开始时接收每个主键写入的最后一条消息,然后接收推送到队列中的所有新消息
套
auto.commit.offset=earliest
将确保从每个新消费群体的起始偏移量开始读取。:接收器应该能够以某种方式识别所有初始状态的消息都已收到。
监控这是很棘手的,因为它取决于客户端,但它包括检查消费群体的抵消滞后,并不是现成的,因为我在客户端看到的。不过,您可以在外部运行consumergroups命令来检查lag。
confluent control center显示可视消息消耗率,但使用者协议设计为连续运行,而不是停在主题的“结尾”
总的来说,如果您希望数据库的主键和快速过滤,那么您可以使用kafka作为一个管道,将其插入到您选择的数据库中,然后从中切分