繁体   English   中英

当输入主题有数据保留期时,启动新的 Kafka Streams 微服务

[英]Starting new Kafka Streams microservice, when there is data retention period on input topics

假设我有(有点)高速输入主题 - 例如sensor.temperature ,它的保留期为 1 天。 多个微服务已经在使用其中的数据。 我还在历史事件存储中备份事件。

现在(作为一个简化的例子)我有新的要求 - 计算每个传感器的最大所有时间温度。 这非常适合 Kafka Streams,因此我准备了新的微服务,该微服务创建 KTable 聚合温度(最大值),每个传感器分组。 如果输入主题具有无限保留,那么简单地部署这个微服务就足够了,但现在最大值将不是所有时间,这是我们的要求。

我觉得这可能是常见的情况,但不知何故我无法在互联网上找到令人满意的解决方案。

也许我错过了一些东西,但我的想法如何让它发挥作用并不好:

  1. 将所有过去的事件重播到输入主题sensor.temperature中。 这是大量的数据,它会导致所有订阅的微服务运行过多的计算,这很可能是不可接受的。
  2. 为我的微服务创建输入主题的副本: sensor.temperature.local ,我将始终复制所有事件,然后从该本地主题进一步处理(聚合)它们。 这样我可以在不影响其他微服务的情况下,自由地将历史事件回放到本地主题中。 然而,所有 Kafka Streams 微服务都需要这个本地副本,如果输入主题是高速的,这可能是太多的重复。
  3. 也许有一些方法可以更直接地修改 KTable,因此可以查询历史事件存储以获取每个传感器的最大值并将其放入 KTable 一次? 但是如果流拓扑更复杂怎么办? 这需要在所有微服务的 KTable 中编排一致的 state,而不是简单地重播事件。

如何设计解决方案?

在此先感谢您的帮助!

在这种情况下,我将创建一个定期存储最大值的主题(这样它就不会因为清理而脱离主题)。 然后你可以让你的服务报告最大主题的最大值和测量主题的最大值。

暂无
暂无

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

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