0

我们使用 Kafka 主题作为事件和存储库。使用 kafka-streams API,我们定义了一个简单的 K-Table 来表示主题中的所有事件。

在我们的用例中,我们将事件发布到主题,然后引用 K-Table 作为后备存储库。主要问题是发布的事件不会立即在 K-Table 上可见。

我们尝试了此处描述的事务和恰好一次语义(https://kafka.apache.org/26/documentation/streams/core-concepts#streams_processing_guarantee),但总是存在我们无法控制的延迟。

  • 发布事件
  • 时间不定
  • 已发布事件在 K-Table 中可见

有没有办法消除延迟或以其他方式知道 K-Table 已使用特定事件。

注意:我们尝试了分区表和全局表,结果相似。

谢谢

4

1 回答 1

0

因为 Kafka 是一个异步系统,所以观察到的延迟是预期的,您无法采取任何措施来避免它。

但是,如果您将消息发布到主题,则KafkaProducer允许您将 a 传递Callbacksend()方法,并且在将消息写入提供记录的元数据(如主题、分区和偏移量)的主题后,将执行回调。

Kafka Streams 处理完消息后,最终会提交偏移量(您也可以配置提交间隔)。因此,您可以知道消息是否在KTable提交偏移量之后。默认情况下,提交仅每 30 秒发生一次,不建议使用非常短的提交间隔,因为这意味着很大的开销。因此,我不确定这是否对您的情况有所帮助,因为您似乎想要更及时的“回应”。

作为替代方案,您还可以禁用缓存KTable并使用一个toStream().process()步骤 - 在每次更新 之后KTable,提供的更改日志流将包含记录,您可以通过给定对象toStream()访问记录元数据(包括其偏移量). 因此,还应该让您弄清楚,当记录在.ProcessorProcessorContextKTable

于 2020-08-18T17:10:16.330 回答