Kafka的Offset存储在哪?

Kafka的offset主要存储在以下几个地方:

1. Zookeeper(老版本)

在老版本的Kafka中,offset信息主要存储在Zookeeper中。
每一个Consumer Group对应的分区信息都存在Zookeeper中。

Zookeeper路径示例

/consumers/group1/offsets/topic1/0 
/consumers/group1/offsets/topic1/1
/consumers/group2/offsets/topic1/0
...

2. Kafka 自己(新版本)

从0.9版本开始,Kafka提供内置的offset存储机制。
offset信息存储在__consumer_offsets的topic中。

__consumer_offsets 的格式

group1|topic1|partition1|offset1    
group1|topic1|partition2|offset2
group2|topic1|partition1|offset3
...

3. 外部存储

Kafka也支持将offset存储在外部储存中,比如MySQL等:

CREATE TABLE offsets (    
  group_id VARCHAR(64),   
  topic VARCHAR(128), 
  partition INT,
  offset BIGINT,
  PRIMARY KEY (topic, partition, group_id)
)

4. 消费者本地

消费者也可以在本地保存offset。
然后通过配置下次启动的时候读取。

Kafka的offset主要存储在:

  1. Zookeeper(老版本,不推荐)
  2. 特殊的Kafka topic(__consumer_offsets)
  3. 外部数据库
  4. 消费者本地

在新版本的Kafka中,推荐将 offset 存储在__consumer_offsets topic 中。这提供了更好的性能和扩展能力。

Kafka主要通过内置的__consumer_offsets topic来管理消费偏移量的存储。也可以存储在外部系统中。