如何解决Kafka Streams在集群上处理超时
在多个实例中运行的基于Kafka的分布式JVM应用程序中,我需要在特定的可配置时间量内“不接收”特定Kafka主题中的特定消息的事件(此超时值由业务逻辑,可能会发生变化。
如何以群集安全的方式完成此任务?
解决方法
目标是跟踪E2E流的延迟,还是有一些触发条件导致可以在可配置的时间内收到第二条消息?
如果跟踪延迟,则一些选项包括:
- 为邮件添加时间戳。收到消息后,可以计算并使用等待时间。
- 在邮件中添加UUID,时间戳和当前组件,并将邮件跟踪委托给在UUID上分区的单独服务。
如果某些触发器导致出现第二条消息,则一些选项包括:
- 对相关主题进行分区,以确保预期消息仅到达或不到达1个JVM(类似于上述2个)。这样可以将预期消息列表保存在内存中。删除预期收到的消息,每隔N秒处理一次“未收到”消息。
- 跟踪数据存储(DB /分布式缓存)中的预期消息。收到后,删除记录。定期处理“未收到”消息。
编辑:
注释中包含详细信息,这是一种使用回调样式方法进行处理的方法。可以通过设置分区键将邮件路由到特定服务器。通过添加在UUID上分区的中间主题/服务,应该可以实现以下目标:
- 将消息A发送到ttl_routing_service。消息A应该包括一个UUID,TTL,在何处发送消息(功能主题)以及到期时的操作。
- 路由服务提取消息并在本地缓存中跟踪一些元数据(例如:TTL /超时时要执行的操作),或者启动延迟的协程,然后将消息A路由到包含UUID的功能主题。
- 完成消息A的处理后,可以使用UUID将消息发送到ttl_routing_service,以防止协程或删除缓存的记录。
- 如果未删除,则执行“到期时该怎么办”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。