【问题标题】:Where does kafka store offsets of internal topics?kafka在哪里存储内部主题的偏移量?
【发布时间】:2019-06-09 10:22:58
【问题描述】:

__consumer_offsets 存储所有 kafka 主题的偏移量,但内部主题(如 *-changelog 主题)在流的情况下除外。这些数据存储在哪里?

【问题讨论】:

  • 我已经阅读/使用了 __consumer_offsets,没有发现与内部主题相关的信息。
  • AFAIK,更改日志主题总是从头开始读取。没有维护的消费者群体信息
  • @cricket_007 不,事实并非如此。我们也可以从上次读取偏移量中读取更新日志主题。
  • 好吧,当然,如果您不关心流的先前状态,那么您会这样做

标签: apache-kafka apache-kafka-streams


【解决方案1】:

“内部主题”一词在 Kafka 中有两种不同的含义:

  1. 经纪人:内部主题是集群使用的主题(如__consumer_offsets)。客户端无法读取/写入此主题。
  2. Kafka Streams:Kafka Streams 自动创建的主题,也称为内部主题。

但是,从 Kafka Streams 的角度来看,那些 -changelog-repartition 主题是“内部”主题,从代理的角度来看,它们是常规主题。因此,两者的偏移量都存储在__consumer_offsets 中,就像任何其他主题一样。

请注意,Kafka Streams 只会提交 -repartition 主题的偏移量。对于-changelog 主题,从未提交过偏移量(Kafka Streams 在客户端进行了一些偏移量跟踪,并将-changelog 偏移量写入本地.checkpoint 文件)。

【讨论】:

  • 谢谢。找到文件。还有一件事,我们有什么办法可以控制这些内部 -changelog 主题的偏移量?如何确保从最早的偏移量读取它?
  • 您不应手动设置这些偏移量。 Kafka Streams 会注意存储中的内容与检查点文件中的偏移量相匹配(即,所有具有较小偏移量的数据都存储在存储中)。
  • 谢谢。当我手动删除 .checkpoint 文件时,我发现流重新创建了具有最新偏移量的文件,流是如何收集偏移量数据的?它是否存储在rocks-db数据文件夹中的某个地方?我正在尝试解决一个用例,即我想重新播放更改日志主题,以防万一我的 RocksDB 数据损坏。所以,我想从头开始阅读更改日志主题而不需要重新启动。
  • 如果您在 Kafka Streams 运行时删除检查点文件,则无关紧要。下次 Kafka Streams 提交时,它将使用主题的最新偏移量更新检查点文件(它在内部跟踪这些偏移量)。---So, I want to read change log topic from start without taking a restart. -> 这是不可能的。
  • Basically, partitions are not sticking to their instances even after sticky assignment policy is there。为什么?自首次发布以来,Kafka Streams 尝试以粘性方式分配任务。 It might create a situation where all instances have data corresponding to all partitions. -> 每个实例在可配置的清理间隔后删除旧状态。因此,这不应该发生。
猜你喜欢
  • 2018-01-23
  • 2017-02-21
  • 2017-04-29
  • 1970-01-01
  • 2014-08-11
  • 2016-03-17
  • 1970-01-01
  • 2019-01-06
  • 2021-01-18
相关资源
最近更新 更多