kafkaoffset详解
时间: 2023-08-20 19:13:52 浏览: 209
Kafka的offset是用来标识消息在分区中的位置的。每个分区都有一个对应的offset,用于记录消费者已经读取的消息位置。当消费者消费消息后,会向Kafka的broker中的一个专门维护每个消费者offset的topic发送一条消息,记录自己当前已读的消息的offset+1的值作为新的offset的消息。这样,下次消费者继续消费时,就可以从上次消费的位置继续读取消息。\[1\]
Kafka的分区数据在磁盘上划分为多个segment,每个segment由索引文件和数据文件两个文件组成。每个segment文件根据设定的配置,最多存储相同大小的消息。每一个segment的文件都以自己文件里存储的第一消息的上一个offset作为文件名,这样可以更加灵活地分片存储以及快速查找。\[2\]
Kafka将不同分区放到不同的broker上,其中一台作为leader,其他为isr(in-sync replicas)或者不在isr中。Kafka的leader负责写入消息,isr的其他成员异步地去同步这些消息。当isr中的所有成员都成功同步了这条消息时,这条消息对于消费端才可见。Kafka使用一个高水位(high watermark)来表示消费者所能读取到的最大的下一个offset。当leader接收到消息后,会先判断isr中成员的offset,如果不是最大+1,代表isr中有成员还没有接收到这条消息,则不会更改高水位。只有当isr中的每台机器的offset都比leader大1时,leader才会更新高水位,并将更新高水位的消息发送给isr中的follower。如果有follower宕机,会被剔除出isr,所以最坏情况下也会将所有follower都剔除,只对自己更新高水位。其他broker在重新加入集群后再同步消息。\[3\]
#### 引用[.reference_title]
- *1* *2* *3* [kafka的offset理解](https://blog.csdn.net/weixin_44627989/article/details/104891945)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文