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主要存储在:
- Zookeeper(老版本,不推荐)
- 特殊的Kafka topic(__consumer_offsets)
- 外部数据库
- 消费者本地
在新版本的Kafka中,推荐将 offset 存储在__consumer_offsets
topic 中。这提供了更好的性能和扩展能力。
Kafka主要通过内置的__consumer_offsets
topic来管理消费偏移量的存储。也可以存储在外部系统中。