Kafka Streams - 共享变更日志主题 [英] Kafka Streams - shared changelog topic

查看:22
本文介绍了Kafka Streams - 共享变更日志主题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是一个后续问题:Kafka Streams- 如何扩展 Kafka 存储生成的变更日志主题

让我们假设流消费者需要在存储数据之前进行一些转换(通过 v->k 而不是 k->v 索引).

let's hypothetically assume the stream consumer needs to do some transformation before storing the data (indexing by v->k instead of k->v).

最后,目标是每个消费者都需要将完整的转换记录集 (v->k) 存储在 RocksDB 中.我知道上游的另一个处理器可以根据 k->v 来处理生成 v->k 并且最终消费者可以简单地从全局表中具体化新主题.但是,如果管道全部在最终消费者处完成,会发生什么?

At the end, the goal is that each consumer needs to store the full set of transformed record (v->k) in a rocksDB. I understand another processor upstream could take care of producing v->k based on k->v and the final consumer could simply materialized the new topic from a globaltable. But what happens if the pipeline is all done at the end consumer?

KTable<Key, Value> table = builder.table(topic);
table.groupBy((k, v) -> KeyValue.pair(v, k)).reduce((newValue, aggValue) -> newValue,
                                                    (newValue, aggValue) -> null,
                                                    Materialized.as(STORE_NAME));

对于这种情况,这些选项中哪一个是最佳实践或最优化(如果我的假设不正确,请支持我)?

Which of these options is the best practice or the most optimal for this scenario (please stand me correct if my assumptions are off)?

  1. 如果所有消费者都有不同的 applicationId,无论 groupId 是多少,他们都会消费所有 k-> 事件并生成多个包含所有内容的变更日志中间主题(这不是最佳的存储方式).
  2. 如果所有消费者具有相同的 applicationId,但在不同的组中,因此独立加载所有 k->v 事件,他们将在共享变更日志流中贡献相同的计算 k->v 事件(基于应用程序 ID).这看起来并不理想,因为我们会多次计算和生成相同的数据.
  3. 如果所有消费者都有相同的applicationId,并且在同一个组中只消费k->v事件的一部分(根据分区),他们将贡献一部分计算的k->v共享变更日志流.但我不清楚每个实体化的rocksDB 是否会有完整的数据集,还是只有流经其消费者管道的切片?

推荐答案

对于 Kafka Streams,applicationId == groupId.因此(2)是不可能的.

For Kafka Streams, applicationId == groupId. Thus (2) is not possible.

对于 (3),该状态是分片/分区的,并且每个实例只有该状态的一部分.

For (3), that state is sharded/partitioned and each instance has only part of the state.

如果您想获得状态的完整副本,则需要使用GlobalKTables 而不是KTables.

If you want to get a full copy of the state, you need to use GlobalKTables instead of KTables.

这篇关于Kafka Streams - 共享变更日志主题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆