kafka-producer的acks参数

首先这个acks参数,属于KafkaProducer,也就是在生产者客户端里设置的,你往kafka写数据的时候,可以来设置这个acks参数。

这个参数有三种常见的值可设置,分别是:0、1 和 all。

第一种选择是acks = 0

我的KafkaProducer在客户端,只要把消息发送出去,不管那条数据有没有发送出去,哪怕Partition Leader没有写入磁盘,也不管他了,直接认为这个消息发送成功。
如果采用这种设置,你必须注意的一点是,可能你发送出去的消息还在半路。结果,Partition Leader所在Broker直接挂了,结果你的客户端还认为消息发送成功了,此时就会导致这条消息就丢失了。

第二种选择是设置 acks = 1

只要Partition Leader接收到消息且写入本地磁盘,就认为成功,不管他其他的Follower有没有同步过去这条消息。
这种设置其实是kafka默认的设置,大家请注意,划重点!这是默认的设置
也就是说,默认情况下,你要是不管acks这个参数,只要Partition Leader写成功就算成功。
但是这里有一个问题,万一Partition Leader刚刚接收到消息,Follower还没来得及同步过去,结果Leader所在的broker宕机了,此时也会导致这条消息丢失,因为人家客户端已经认为发送成功了。

最后一种情况,就是设置acks=all

Partition Leader接收到消息之后,还必须要求ISR列表里跟Leader保持同步的那些Follower都要把消息同步过去,才认为这条消息是写入成功的。
如果说Partition Leader刚接收到了消息,但是结果Follower没有收到消息,此时Leader宕机了,那么客户端会感知到这个消息没发送成功,他会重试再次发送消息过去。
此时可能Partition 2的Follower变成Leader了,此时ISR列表里只有最新的这个Follower转变成的Leader了,那么只要这个新的Leader接收消息就算成功了。

acks=all 就能保证数据一定不会丢失了吗?
不一定,如果你的Partition只有一个副本,也就是一个Leader,任何Follower都没有,你认为acks=all有用吗?
当然没用了,因为ISR里就一个Leader,他接收完消息后宕机,也会导致数据丢失。
所以,这个acks=all,必须跟ISR列表里至少有2个以上的副本配合使用,起码是有一个Leader和一个Follower才可以。
这样才能保证说写一条数据过去,一定是2个以上的副本都收到了才算是成功,此时任何一个副本宕机,也不会导致数据丢失。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Kafka Producer 配置参数主要包括以下几个: 1. bootstrap.servers:Kafka 集群中 Broker 的地址清单,Producer 会根据这个地址清单来连接 Kafka 集群。 2. acks:Producer 发送消息后等待 Broker 返回确认信息的方式,可选值为0、1、all。0表示 Producer 不需要等待 Broker 的确认,1表示 Producer 只需要等待 Leader Broker 的确认,all表示 Producer 需要等待所有副本 Broker 都确认后才认为消息发送成功。 3. retries:Producer 在发送消息失败时的重试次数,0表示不重试。 4. batch.size:每个 batch 中消息的数量,Producer 会将多个消息打包成一个 batch 进行批量发送。 5. linger.ms:Producer 在发送消息前等待的时间,如果在等待时间内消息数量未达到 batch.size,则会立即发送消息。如果在等待时间内消息数量已经达到 batch.size,则会立即发送消息。 6. buffer.memory:Producer 允许使用的缓存大小,用于存储还未发送到 Broker 的消息,当缓存中的消息达到一定数量时,Producer 会将其发送到 Broker。 7. key.serializer 和 value.serializer:Producer 发送消息时使用的 key 和 value 的序列化方式。 8. max.in.flight.requests.per.connection:Producer 允许在未收到 Broker 确认信息前发送的最大请求数量。 9. compression.type:Producer 发送消息时使用的压缩方式,可选值为none、gzip、snappy。 以上是 Kafka Producer 常用的配置参数,还有其他一些高级参数可以根据具体的业务需求进行设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王雀跃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值