gpt4 book ai didi

java - KStreams 确定在连接上保留哪些输入记录时间戳元数据

转载 作者:行者123 更新时间:2023-11-30 06:03:55 27 4
gpt4 key购买 nike

希望有人知道这一点或者能给我指出正确的方向......

我有一个通过 API REST 请求创建的数据主题。 REST 请求中收到的字段之一是记录 EventTime 的时间戳。这些记录将生成到 Kafka,并将 EventTime 设置为记录的元数据时间戳。

我有另一个规则主题,它提供通过向接收到的值添加新字段来扩充数据主题记录的信息。

这两个主题都有匹配的加入键。

我的目标是使用处理器 API 在所有处理阶段保留数据主题中的 EventTime。请注意,将会有多个不同的 KStreams 应用程序以多种方式/步骤处理/增强此数据。

好消息是,我看到很多事情表明使用 Kafka Streams 时会保留输入记录时间戳。

如:

并且也一直在阅读时间戳提取器:

有关加入的更多信息:

在大部分 Streams 文档中,我看到它提到“输入记录的时间戳将保留到输出记录”,但我不清楚这在连接方面到底是如何工作的。

我的困惑似乎是,当我们加入时,我们有 2 个不同的输入记录,并生成一个输出记录。

如何确定连接中使用的多个输入记录之间保留哪个时间戳?

我和同事讨论过,有如下几种观点

  • 连接输入记录的最早非负时间戳是坚持了下来。
  • 左侧输入记录的时间戳被保留,例如leftStream.join(rightStream, ...);
  • 触发连接的输入记录的时间戳(左或右)
  • 它是非确定性的,因此除非为生产者指定了时间戳提取器,否则将使用挂钟时间。

其中一些比其他的有更好的论据,但我需要知道到底发生了什么......

任何关于在哪里查看的帮助或建议都值得赞赏。

最佳答案

目前(即 Kafka 2.0 版本)没有将使用时间戳的公共(public)合约,并且允许实现使用任何策略。当前的实现使用触发连接计算的记录的时间戳。

作为解决方法,您可以通过在连接后添加 .valueTransformer() 来操作时间戳。比较 https://cwiki.apache.org/confluence/display/KAFKA/KIP-251%3A+Allow+timestamp+manipulation+in+Processor+API

即,您需要在连接之前将原始时间戳嵌入到值负载中,并在连接之后将其提取并设置为元数据时间戳。

关于java - KStreams 确定在连接上保留哪些输入记录时间戳元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51730989/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com