什么是kafka内部主题

时间:2019-05-10 15:43:19

标签: apache-kafka

我们正在使用kafka流api进行聚合,在其中我们还使用了分组依据。 我们还使用状态存储来保存输入主题数据。

我注意到的是

Kafka内部创建3种主题

  1. Changelog-<storeid>-<partition>
  2. Repartition-<storeid>-<partition>
  3. <topicname>-<partition>

我不明白的是

  1. 当我将所有数据都存储在<topic>-<partition>中时,为什么它会创建changelog主题
  2. 重新分区主题是否包含分组后的数据。
  3. ,我发现Changelog和topicname-parition的大小大致相同。

数据中有什么不同,因此必须为此保存一个不同的文件。

2 个答案:

答案 0 :(得分:1)

Kafka内部主题有几种类型:

  • __consumer_offsets用于存储每个主题/分区的偏移量提交。
  • __transaction_state用于使用事务语义为Kafka生产者和消费者保持状态。
  • 架构注册表使用
  • _schemas存储所有架构,元数据和兼容性配置。
  • 以下三个主题是Kafka Streams使用的内部主题的示例。前两个是常规联接信息,第三个实际上是RocksDB持久性StateStore:
    • {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