我们正在使用kafka流api进行聚合,在其中我们还使用了分组依据。 我们还使用状态存储来保存输入主题数据。
我注意到的是
Kafka内部创建3种主题
Changelog-<storeid>-<partition>
Repartition-<storeid>-<partition>
<topicname>-<partition>
我不明白的是
<topic>-<partition>
中时,为什么它会创建changelog主题数据中有什么不同,因此必须为此保存一个不同的文件。
答案 0 :(得分:1)
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
此处有更多信息:
答案 1 :(得分:0)
“更改日志”和“分区”内部Kafka主题特定于Kafka Streams。
从Kafka Wiki,
当流上有加入/聚合操作时,会创建Kafka Streams允许状态流处理,即具有内部状态的运算符。内部状态在所谓的状态存储中进行管理。状态存储可以是短暂的(失败时丢失)或容错的(失败后恢复)。 Kafka Streams DSL使用的默认实现是容错状态存储,它使用1.一个内部创建并压缩的changelog主题(用于容错)和2.一个(或多个)RocksDB实例(用于缓存的键值查找)。因此,在启动/停止应用程序以及倒带/重新处理的情况下,需要对内部数据进行正确的管理。
变更日志主题。实际上,聚集调用的结果将创建一个状态存储,并且为了容错,该状态存储由Kafka Changelog主题进行备份。
聚合结果存储在此内部主题中。重新启动应用程序且未更改application-id时,状态将从Changelog主题中恢复。
在流上进行键修改操作时,会创建重新分区主题。例如,groupByKey()操作创建重新分区主题。检查JIRA page,以了解有关自动创建重新分配主题的更多信息。
这两个内部主题使Kafka流具有容错状态流处理功能。
重新分区主题在分组后是否包含数据?-是
Changelog的大小和topicname-parition的大小大致相同-可能所有聚合操作的结果都存储在此主题中。
有关更多详细信息,请检查Kafka Wiki page。