gpt4 book ai didi

apache-kafka - 卡夫卡流 : KTable materialization

转载 作者:行者123 更新时间:2023-12-02 17:08:38 25 4
gpt4 key购买 nike

如何确定主题的 KTable 物化何时完成?

例如假设 KTable 有几百万行。伪代码如下:

KTable<String, String> kt = kgroupedStream.groupByKey(..).reduce(..); //Assume this produces few million rows

在某个时间点,我想安排一个线程来调用以下写入主题的线程:kt.toStream().to("output_topic_name");

我想确保所有数据都作为上述调用的一部分写入。另外,一旦调用了上述“to”方法,是否可以在下一个调度中调用它,或者第一个调用是否始终保持事件状态?

后续问题:

约束
1) 好的,我看到一旦 kafkastream 启动,kstream 和 ktable 是无界/无限的。但是,ktable 实体化(到压缩主题)不会在指定时间段内为同一键发送多个条目。

因此,除非压缩过程尝试清除这些并仅保留最新的,否则下游应用程序将消耗所有可用条目以从主题查询相同的键,从而导致重复。即使压缩过程进行了某种程度的清理,也总是不可能在给定的时间点,随着压缩过程的进行,有些键具有多个条目。

我假设 KTable 对于 RocksDB 中的给定键只有一条记录。如果我们有办法安排物化,那将有助于避免重复。此外,减少主题中持久化的数据量(增加存储),增加网络流量,压缩过程的额外开销以清理它。

2) 也许 ReadOnlyKeyValueStore 允许从存储中进行受控检索,但它仍然缺乏安排检索键、值和写入主题的方法,这需要额外的编码。

是否可以改进 API 以允许受控实现?

最佳答案

KTable 实体化永远不会完成,您也不能“调用”to()

当您使用 Streams API 时,您将运算符的 DAG“连接在一起”。实际的方法调用,不触发任何计算,只是修改算子的DAG。

只有在通过 KafkaStreams#start() 开始计算后,数据才会被处理。请注意,您指定的所有运算符将在计算开始后连续并发运行。

没有“计算结束”,因为输入应该是无界/无限的,因为上游应用程序可以随时将新数据写入输入主题。因此,您的程序永远不会自行终止。如果需要,您可以通过 KafkaStreams#close() 停止计算。

在执行期间,您不能更改 DAG。如果要更改它,则需要停止计算并创建一个新的 KafkaStreams 实例,将修改后的 DAG 作为输入

跟进:

是的。您必须将 KTable 视为一个“版本化的表”,当条目更新时,它会随着时间的推移而演变。因此,所有更新都写入变更日志主题并作为变更记录发送到下游(请注意,KTables 也会进行一些缓存,以“删除重复”对同一键的连续更新:参见 https://docs.confluent.io/current/streams/developer-guide/memory-mgmt.html)。

will consume all available entries for the same key querying from the topic, causing duplicates.

我不会将它们视为“重复”,而是更新。是的,应用程序需要能够正确处理这些更新。

if we have a way to schedule the materialization, that will help to avoid the duplicates.

具体化是一个连续的过程,每当输入主题中有新的输入记录可用并被处理时,KTable 就会更新。因此,在任何时间点都可能有特定 key 的更新。因此,即使您可以完全控制何时向更新日志主题和/或下游发送更新,稍后也可能会有新的更新。这就是流处理的本质。

Also, reduce the amount of data being persisted in topic (increasing the storage), increase in the network traffic, additional overhead to the compaction process to clean it up.

前面说了缓存是为了节省资源。

Can the API be improved to allow a controlled materialization?

如果提供的 KTable 语义不符合您的要求,您可以随时编写一个自定义运算符作为 ProcessorTransformer,为其附加一个键值存储,并实现您需要的任何内容。

关于apache-kafka - 卡夫卡流 : KTable materialization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50440550/

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