Kafka Streams在集群上处理超时

时间:2020-09-29 09:10:34

标签: apache-kafka architecture apache-kafka-streams

在多个实例中运行的基于Kafka的分布式JVM应用程序中,我需要在特定的可配置时间量内“不接收”特定Kafka主题中的特定消息的事件(此超时值由业务逻辑,可能会发生变化。

如何以群集安全的方式完成此任务?

1 个答案:

答案 0 :(得分:1)

目标是跟踪E2E流的延迟,还是有一些触发条件导致可以在可配置的时间内收到第二条消息?

如果跟踪延迟,则一些选项包括:

  1. 为邮件添加时间戳。收到消息后,可以计算并使用等待时间。
  2. 在邮件中添加UUID,时间戳和当前组件,并将邮件跟踪委托给在UUID上分区的单独服务。

如果某些触发器导致出现第二条消息,则一些选项包括:

  1. 对相关主题进行分区,以确保预期消息仅到达或不到达1个JVM(类似于上述2个)。这样可以将预期消息列表保存在内存中。删除预期收到的消息,每隔N秒处理一次“未收到”消息。
  2. 跟踪数据存储(DB /分布式缓存)中的预期消息。收到后,删除记录。定期处理“未收到”消息。

编辑:

注释中包含详细信息,这是一种使用回调样式方法进行处理的方法。可以通过设置分区键将邮件路由到特定服务器。通过添加在UUID上分区的中间主题/服务,应该可以实现以下目标:

  1. 将消息A发送到ttl_routing_service。消息A应该包括一个UUID,TTL,在何处发送消息(功能主题)以及到期时的操作。
  2. 路由服务提取消息并在本地缓存中跟踪一些元数据(例如:TTL /超时时要执行的操作),或者启动延迟的协程,然后将消息A路由到包含UUID的功能主题。
  3. 完成消息A的处理后,可以使用UUID将消息发送到ttl_routing_service,以防止协程或删除缓存的记录。
  4. 如果未删除,则执行“到期时该怎么办”。