阅读kafka broker相关文档

This commit is contained in:
2023-10-06 02:24:09 +08:00
parent 48d52cf098
commit 4197045981
2 changed files with 125 additions and 2 deletions

View File

@@ -346,12 +346,27 @@ follower从leader分区消息消息就像一个普通的消费者一样
另外,**如果一个节点仍然处于活跃状态但是离同步leader的数据有很长的延迟那么leader将会将该节点从ISR中移除**。延迟的最长时间通过`replica.lag.time.max.ms`来配置。如果在`replica.lag.time.max.ms`时间内副本没能通过leader到日志结尾的数据那么副本节点将会从ISR中被移除。
> `replica.lag.time.max.ms`的默认值为30s
#### 消息提交的定义
在某分区对应ISR中所有的副本都将消息追加到它们的log后则可以认为该消息被提交。故而消费者并无需担心分区的leader宕机后消息会丢失的问题因为消息在提交前已经持久化到其分区副本中。
作为生产者可以在发送消息时决定是否等待消息被提交这需要在等待提交所带来的延迟和不等待提交所带来的消息丢失风险中进行权衡。是否等待提交取决于生产者的ack设置。
#### acks
可以针对生产者设置acks模式。acks模式可设置为如下值
- 0此时生产者发送消息时无需等待broker的ack消息会被直接添加到缓冲区中并且消息被认为已发送成功。此时并无法保证消息被发送给broker并且重试设置也不会起作用
- 1这种情况下会等待来自于leader的ack保证消息被写入到leader分区中。但是如果leader broker返回ack后立马宕机其他副本broker并没有同步leader分区数据那么消息将会被丢失
- -1all这种情况下leader broker会等待ISR队列中所有的副本broker都对该消息返回ack后才对生产者返回ack。此时只要当前集群中还存在一个in-sync副本那么消息就不会丢失
> `acks`的默认值是-1all
> acks=-1的情况下会产生重复数据的问题如果发送消息后消息已经全部存储到所有的broker但是再尚未ack的情况下leader宕机那么生产者会重新发送消息此时消息会被重复存储在消息队列中
#### 最小写入副本数
topic可以设置一个最小写入的副本数通过配置`min.insync.replicas`可以对最小写入副本数进行配置。即使消息已经同步到所有ISR副本后如果同步数目小于该值同步数目包含leader消息也无法被视为提交
当acks设置为-1alltopic可以设置一个最小写入的副本数通过配置`min.insync.replicas`可以对最小写入副本数进行配置。即使消息已经同步到所有ISR副本后如果同步数目小于该值同步数目包含leader消息也无法被视为提交
> `min.insync.replicas`的值默认为1. 该值只有当生产者ack模式设置为-1all时才起作用
> kafka保证一条消息只要被提交只要有一个in-sync-replica处于活跃状态那么消息就不会被丢失