Abh*_*hek 3 apache-kafka apache-kafka-streams
我们正在使用 kafka 流 api 进行聚合,其中我们也使用 group by。我们还使用状态存储来保存输入主题数据。
我注意到的是
Kafka内部创建了3种topic
Changelog-<storeid>-<partition>
Repartition-<storeid>-<partition>
<topicname>-<partition>
我无法理解的是
<topic>-<partition>
数据有什么不同,因此它必须为此保存不同的文件。
内部 Kafka 主题有几种类型:
__consumer_offsets
用于存储每个主题/分区的偏移量提交。__transaction_state
用于使用事务语义为 Kafka 生产者和消费者保留状态。 _schemas
模式注册表使用它来存储所有模式、元数据和兼容性配置。{consumer-group}--KSTREAM-JOINOTHER-0000000005-store-changelog
{consumer-group}--KSTREAM-JOINTHIS-0000000004-store-changelog
{consumer-group}--incompleteMessageStore-changelog
这里有更多信息:
'Changelog' 和 'repartition' 内部 Kafka 主题特定于 Kafka Streams。
来自卡夫卡维基,
Kafka Streams 允许有状态的流处理,即具有内部状态的操作符。这种内部状态在所谓的状态存储中进行管理。状态存储可以是短暂的(失败时丢失)或容错的(失败后恢复)。Kafka Streams DSL 使用的默认实现是一种容错状态存储,使用 1. 内部创建和压缩的变更日志主题(用于容错)和 2. 一个(或多个)RocksDB 实例(用于缓存的键值查找)。因此,在启动/停止应用程序和倒带/重新处理的情况下,需要正确管理这些内部数据。
当流上有加入/聚合操作时,会创建变更日志主题。实际上,聚合调用的结果会创建一个状态存储,并且为了容错,状态存储由 Kafka Changelog 主题备份。
聚合结果存储在这个内部主题中。当应用程序重新启动且 application-id 未更改时,状态将从更改日志主题中恢复。
当流上有关键修改操作时,会创建重新分区主题。例如 groupByKey() 操作创建重新分区主题。查看JIRA 页面以了解有关自动创建重新分区主题的更多信息。
这两个内部主题使 Kafka 流具有容错的有状态流处理能力。
重新分区主题是否包含分组后的数据?- 是的
Changelog 和 topicname-parition 的大小大致相同- 可能所有聚合操作的结果都存储在此主题中。
有关更多详细信息,请查看Kafka Wiki 页面。
归档时间: |
|
查看次数: |
4111 次 |
最近记录: |