kafka流在群集上处理超时

kb5ga3dv  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(371)

在一个运行在多个示例中的基于kafka的分布式jvm应用程序中,我需要在特定kafka主题中的某个消息“未接收”事件上处理一段可配置的时间(该超时值由业务逻辑驱动,可能会发生更改)。
如何以集群安全的方式实现这一点?

bzzcjhmw

bzzcjhmw1#

目标是跟踪e2e流的延迟,还是有某种触发器导致在某个可配置的时间内出现第二条消息?
如果要跟踪延迟,有些选项包括:
向消息添加时间戳。当接收到消息时,可以计算并使用延迟。
向消息中添加uuid、timestamp和current组件,并将消息跟踪委托给在uuid上分区的单独服务。
如果某个触发器导致出现第二条消息,则某些选项包括:
对相关主题进行分区,以确保预期的消息只到达或不到达1个jvm(类似于上面的2个jvm)。这将允许在内存中保留预期消息的列表。接收时删除预期消息,每n秒处理一次“未接收”消息。
跟踪数据存储(db/分布式缓存)中的预期消息。收到后,删除记录。定期处理“未收到”消息。
编辑:
如果注解中有详细信息,则可以使用回调样式的方法来处理此问题。通过设置分区密钥,可以将消息路由到特定的服务器。通过添加一个在uuid上分区的中间主题/服务,应该可以实现如下目的:
向ttl\ U路由\服务发送消息。消息应该包括uuid、ttl、将消息发送到哪里(函数主题)以及到期时要做什么。
路由服务提取消息并跟踪本地缓存中的一些元数据(例如:ttl/超时时要做什么),或者启动一个延迟的协同路由,然后将消息路由到包含uuid的功能主题。
消息处理完成后,可以使用uuid将消息发送到ttl\u routing\u服务,以防止协同路由或删除缓存记录。
如果未删除,则执行“到期时的操作”。

相关问题