1、复制系数N
replication.factor
每个主题的Partition都会有N个副本
这样,在N-1个broker失效的情况下,仍然能从主题读取数据或向主题写入数据
复制系数N需要至少N个broker,而且会有N个数据副本
2、不完全的首领选举
unclean.leader.election
如果设为true,当分区首领不可用时,我们允许不同步的副本(不在ISR中)成为首领,需要承担丢失数据和出现数据不一致的风险。
如果设为false,当分区首领不可用时,我们只允许同步的副本(在ISR中)成为首领,但如果此时没有同步的副本,我们只能等待原先的首领上线,降低了可用性。
3、最少同步副本
min.insync.replcas
对于一个包含3个副本的主题,如果min.insync.replcas被设为2,那么至少要存在两个同步副本才能向分区写入数据
如果不满足两个同步副本,那么broker会停止接受生产者的请求。尝试发送数据的生产者会受到NotEnoughReplicasException异常。消费者仍然可以继续读取已有的数据。
这样是为了避免在发生不完全选举时数据的写入和读取出现非预期的行为
4、生产者保证
1)acks 0,1,-1/all
通过acks=all,保证消息达到所有的副本
2)retries 重试次数
3)开发人员针对异常进行处理
例如将异常的消息保存起来,后续处理
5、消费者保证
1)group.id
消费者组,同一个消费者组中的消费者只会分到主题分区的一个子集
2)auto.offset.reset
在没有偏移量可提交时(比如消费者第一次启动时)或者请求的偏移量在broker上不存在时(发生了rebalance),消费者应该获取什么偏移量
earliest,消费者会从分区的开始位置读取数据,会导致消费重复数据
lastest,消费者会从分区的末尾开始读取数据,这样可以减少处理重复数据,但很有可能会错过一些消息
3) enable.auto.commit
是否允许自动提交
4) auto.commit.interval.ms
自动提交间隔时间