订阅开始时,Apache Kafka是否支持接收每个ID的最新消息?

时间:2018-08-01 08:51:26

标签: apache-kafka messagebroker

我正在评估一个项目的Message Brokers,但是找不到关于Apache Kafka是否支持以下用例的明确答案:

  • 具有其他属性的消息会在接收到消息时进行过滤。这些附加属性可以视为每封邮件的主键,最简单的形式就是一个ID属性(例如,(不规则地)产生测量数据的传感器的ID)。
  • 0到n个使用者从主题中接收到这些消息,最终筛选出主键。
  • 接收消息时不会消耗消息,因此,主题上的所有使用者都将在接收消息后接收所有推送给他们的消息(处于“在线状态”)。
  • 当没有消费者从某个主题接收消息时,Message Broker至少更新每个主键的消息内部状态。
  • 当消费者订阅主题时,它必须能够在开始时接收每个主键写入的最后一条消息,然后从此开始,所有新消息都被推送到队列中,最终被主键过滤。接收者应该能够以某种方式识别出,已收到开始时所有初始状态的消息。

Kafka是否支持此用例,如何实现?如果Kafka无法提供此功能,那么其​​他Message Broker可以提供哪些功能?

1 个答案:

答案 0 :(得分:1)

  

具有其他属性的邮件,可在接收邮件时进行过滤

您可以使用Kafka Streams或KSQL过滤消息。此操作的输出将成为消费者阅读的新主题。

或者,您可以通过该“ ID”字段执行主题分区,并将其设置为Kafka消息密钥,具体取决于该值的基数。

  

0到n个消费者从主题中收到这些消息

是的,Kafka可以有N个消费者

  

邮件在接收时不会被消耗

不清楚这是什么意思。 “消费”和“接收”是一回事。

  

只要是消费主题的消费者,他们就会收到推送给他们的所有消息

不是将消息“推”给在线消费者,而是poll版。任何订阅的消费者将看到其主题请求的消息

  

:当没有消费者从某个主题接收消息时,Message Broker至少更新每个主键的消息内部状态

Kafka没有主键。它有偏移量。如果没有主题使用者,则偏移量将过期,代理将删除消息。邮件内容本身将永远不会被修改

  

当消费者订阅主题时,它必须能够在开始时接收从每个主键写入的最后一条消息,然后从此开始将所有新消息推送到队列中

设置auto.commit.offset=earliest将确保您从每个新使用者 group 的起始偏移量开始读取。

  

:接收者应该能够以某种方式识别出,已收到开始时所有初始状态的消息。

监视此过程非常棘手,因为它取决于客户端,但是它包括检查使用者组的偏移量滞后,而且据我在客户端所见,并不是开箱即用的。不过,您可以从外部运行consumer groups命令来检查延迟。

Confluent Control Center显示了可视消息消耗率,但是消费者协议旨在连续运行,而不是在主题的“结尾”处停止运行


总体而言,如果您期望数据库的主键和快速过滤功能,则可以将Kafka用作通向您选择的数据库的管道,然后从那里进行切片和切块