繁体   English   中英

Kafka Streams 是否适合触发记录的批处理?

[英]Are Kafka Streams Appropriate for Triggering Batch Processing of Records?

语境

我有三个服务,每个服务都会生成一个特定的 JSON 有效负载(并且需要不同的时间来执行此操作),这需要能够处理一条消息,该消息是将所有三个 JSON 有效负载组合成一个有效负载的结果。 这个最终的有效载荷又将被发送到另一个 Kafka 主题,以便它可以被另一个服务使用。

您可以在下面找到一个图表,可以更好地解释手头的问题。 信息聚合器服务接收到聚合信息的请求,它将该请求发送到 Kafka 主题,以便服务 1、服务 2 和服务 3 使用该请求并将其数据(JSON 有效负载)发送到 3 个不同的 Kafka 主题。

应用程序的架构及其主要组件

信息聚合器必须使用来自三个服务的消息(这些消息在非常不同的时间发送到各自的 Kafka 主题,例如服务 1 需要半小时响应,而服务 2 和 3 需要不到 10 分钟),以便它可以生成最终有效载荷(表示为聚合信息)发送到另一个 Kafka 主题。

研究

在对 Kafka 和 Kafka Streams 进行了大量研究之后,我看到了这篇文章,它提供了一些关于如何详细阐述的深刻见解。

在本文中,作者使用来自单个主题的消息,而在我的特定用例中,我必须使用来自三个不同主题的消息,等待来自每个主题的具有特定 ID 的每条消息到达,以便我可以向我的进程发出信号,它可以继续使用不同主题中具有相同 ID 的 3 条消息以生成最终消息并将该最终消息发送到另一个 Kafka 主题(然后另一个服务将使用该消息)。

深思熟虑的解决方案

我的想法是,我需要一个 Kafka Stream 检查所有三个主题,当它看到所有 3 条消息都可用时,向名为例如 TopicEvents 的 kafka 主题发送一条消息,信息聚合器将从该主题中消费并消费该消息将确切地知道从哪个主题、分区和偏移量获取哪些消息,然后可以继续将最终有效负载发送到另一个 Kafka 主题。

问题

  • 我对 Kafka 流和批处理的使用非常错误吗?

  • 我如何向 Stream 发出所有消息都已到达的信号,以便它可以生成要放置在 TopicEvent 中的消息,从而向信息聚合器发出不同主题中的所有消息已到达并准备好使用的信号?

很抱歉这篇长篇文章,您可以提供的任何指示都会非常有帮助,并提前感谢您

如何向 Stream 发出所有消息已到达的信号

您可以使用 Streams 和连接来执行此操作。 由于连接仅限于 2 个主题,因此您需要进行 2 次连接才能获得所有 3 个主题都发生的事件。

加入 TopicA 和 TopicB 以获取 A 和 B 发生时的事件。 将 AB 与 TopicC 连接以获得 A、B 和 C 发生的事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM