【问题标题】:Waiting for N Events in Kafka: How does the Group-Count-Filter Approach work?在 Kafka 中等待 N 个事件:Group-Count-Filter 方法如何工作?
【发布时间】:2020-11-19 18:46:39
【问题描述】:

背景

Designing Event-Driven Systems一书中,作者强调了业务系统中的一个常见用例,需要等待或N个事件发生。

给出的示例是一个订单服务,它需要等待三个单独的验证服务,它们都通过同一个主题发送,以返回一个PASS。 (我将这解释为在同一个主题上会有三个具有相同键的验证消息,每个都有一个指示成功或失败的值。)

作者表示,解决方案将采用以下形式(假设基于key进行计数):

  1. 按键分组。
  2. 计算每个键的出现次数(使用通过窗口执行的聚合器)。
  3. 过滤输出以获得所需的计数。

问题

上述每个步骤具体是如何工作的,涉及哪些类/方法?

  • 特别是第一步(按键分组)是指使用KStream::groupByKey方法吗?
  • 如果是这样,输出将是KGroupedStream,并且第二步可能使用Count 方法之一并返回KTable
  • 但是,如果有一个 KTable,我们如何按照第三步过滤 KTable 上的输出

【问题讨论】:

    标签: java apache-kafka message-queue apache-kafka-streams distributed-computing


    【解决方案1】:

    我猜你的假设是正确的。对于第 (2) 步,这取决于您,但如果您假设您正在等待的所有消息都具有相同的密钥,并且您只对收到具有相同密钥的三条消息感兴趣,那么调用 count() 就是您想要的。

    下一步(即 (3)),您将调用 KTable#filter() 以获取计数为 3 的所有行。

    最后,您可以调用toStream(),每次一个键的计数达到 3 时,此流都应包含一条记录。

    (附带说明:默认情况下,所有条目都将永久保留在KTable 中,因此您还需要注意删除在某些时候确实达到 3 的条目。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-30
      相关资源
      最近更新 更多