kafka高可靠性相关配置
为保证高可靠可以通过以下方面进行设置:
1) 物理机器
场景 | 配置项 | 配置说明 |
高可靠高性能 | 不间断电源 | 配置,防止服务器异常断电 |
RAID卡电池 | 配置,防止服务器异常断电 | |
RAID卡写缓存 | 开启,提高性能 | |
RAID 1 | 配置 | |
硬盘写缓存 | 关闭,提高数据可靠性 |
2) Kafka和业务系统
参数 | 值 | 说明 |
unclean.leader.election.enable | false | 不允许不在ISR中的副本被选举为Leader |
auto.leader.rebalance.enable | false | 不使用Leader自动均衡功能。 |
acks | -1(all) | 当producer需要Leader确认消息是否已经接收并认为已经处理完成。该参数会影响消息的可靠性。 Acks=-1(all)需要等待在ISR列表这种的副本都确认接收到消息并处理完成才表示消息成功。 |
min.insync.replicas | 2 | 当Producer设置acks为-1时,指定需要写入成功的副本的最小数目。 |
其中min.insync.replicas、unclean.leader.election.enable、acks为Topic级别设置,可以根据不同Topic进行设置。
3) 影响
l 性能降低。
需要所有的ISR列表副本,且满足最小成功的副本数确认写入成功。这样会导致单条消息时延增加,客户端处理能力下降。
从实验室测试场景来看,
时延增加6倍,吞吐量下降70%。具体性能以现场实际测试为准。
l 可用性降低。
Ø unclean.leader.election.enable
不允许不在ISR中的副本被选举为Leader。如果所有副本都不可用,那么分区将保持不可用,直到最近的Leader再次可用。
例如:
Test-0分区有副本1、2。acks=1,min.insync.replicas=1。
当2处于故障状态,1接收写入。
Topic: test Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1
当2修复启动后向1进行同步,其不在ISR列表中。
Topic: test Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1
此时1发生故障,2无法被选为leader,分区无法接受写入和读取。必须等待1修复后才可继续提供服务。
1) min.insync.replicas、acks
需要所有的ISR列表副本,且满足最小成功的副本数确认写入成功。当Partition的一个Replica所在节点故障时,无法满足最小成功的副本数,那么将会导致业务写入失败。
例如:
Test-0分区有副本1、2。acks=-1(all),min.insync.replicas=2。
Topic: test Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1,2
当2处于故障状态,由于不满足min.insync.replicas将会导致写入失败。
Topic: test Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1
建议:通常情况下,使用ack=1,min.insync.replicas=1就能够满足的业务需求。