Kafka消息可靠性配置

Kafka发送消息是异步的,因此如果没有设置异步回调异常处理,很容易导致消息丢失而且系统不知道的情况的。 因此我们在业务有需要的情况下,配置好消息的可靠性参数。
主要配置以下参数

max.block.ms =
acks = all or -1
retries = Integer.MAX_VALUE
max.in.flight.requests.per.connection = 1
unclean.leader.election.enable = false
default.replication.factor =3
min.insync.replicas = 2
replication.factor > min.insysnc.replicas
enable.auto.commit= false.
代码回调机制的send方法 KafkaProducer.send(record, callback)
我们一一介绍这些参数的含义和作用。

对于producer端,

acks = all or -1
等待所有的follower都响应了发送消息才能认为发送消息成功,这是producer端最强程度的持久化保证。

max.in.flight.requests.per.connection = 1
是为了防止topic同分区下的消息乱序。

max.block.ms = 60000 (默认值)
如果发送端缓冲区已经满了,Producer会阻塞多长时间。 如果Producer发送的比broker端接收快,会抛出异常。.
The configuration controls how long KafkaProducer.send() and KafkaProducer.partitionsFor() will block.These methods can be blocked either because the buffer is full or metadata unavailable.Blocking in the user-supplied serializers or partitioner will not be counted against this timeout.

对于broker端

unclean.leader.election.enable = false
关闭unclean leader选举,即不允许非ISR中的副本被选举为leader,从而避免broker端因为日志水位截断造成的消息丢失。

default.replication.factor =3
副本因此一般设置为3,

min.insysnc.replicas
用于控制某条消息至少被被写入到ISR中的多少个副本才算成功,设置成大于1是为了提升producer端发送语义的持久性,只有在producer端的acks被设置为all或者-1时,这个参数才意义。

确保replication.factor > min.insysnc.replicas
若两者相等,那么只要有一个副本挂掉了,分区就无法正常工作,虽然有很高的持久性,但是可用性降低了。 推荐配置replication.factor = min.insysnc.replicas + 1

参考:http://kafka.apache.org/documentation.html#producerconfigs

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值