【Kafka】Kafka生产者开启幂等性后报错:Cluster authorization failed. ...

打印 上一主题 下一主题

主题 910|帖子 910|积分 2730

背景


  • 用户业务需求,需要开启生产者的幂等性,生产者加了设置:enable.idempotence = true
  • 用户使用的集群开启了ACL认证:SASL_PLAINTEXT/SCRAM-SHA-512
  • 用户生产消息时报错:org.apache.kafka.common.errors.ClusterAuthorizationException: Cluster authorization failed.
办理

服务端设置

检察Kafka源码,发现生产者这个设置(enable.idempotence)有一个说明:
   When set to 'true', the producer will ensure that exactly one copy of each message is written in the stream. If 'false', producer retries due to broker failures, etc., may write duplicates of the retried message in the stream. Note that enabling idempotence requires <code>max.in.flight.requests.per.connection</code> to be less than or equal to 5, <code>retries</code> to be greater than 0 and <code>acks</code> must be 'all'. If these values are not explicitly set by the user, suitable values will be chosen. If incompatible values are set, a <code>ConfigException</code> will be thrown.
  检察Kafka官网,对改设置也有雷同的说明:

总结一下,服务端要支持生产幂等性的话,需要保证以下几个设置:


  • enable.idempotence = true
  • max.in.flight.requests.per.connection = 5
  • acks = all
以下是为什么需要这么设置的缘故原由:

  • max.in.flight.requests.per.connection:它用于设定在单个生产者-署理连接上可以同时进行的未确认的发送哀求的最大数量。当此值设为1时,生产者将在收到上一个哀求的相应后才会发送下一个哀求。这确保了消息的发送顺序,但可能会限定吞吐量。当此值大于1时,生产者可以同时发送多个哀求,这可能会提高吞吐量。然而,如果某个哀求失败,那么该哀求后的全部哀求都可能会在其之前成功,这可能会导致消息的发送顺序被打乱。在启用幂等性的情况下,此值需要设为5或更小的值,以保证消息的顺序和幂等性。
  • retries:这个设置决定了生产者在发送失败后重试的次数。如果这个值为0,那么在网络故障大概其他故障情况下,消息可能会丢失。为了保证消息的可靠性,这个值需要大于0。
  • acks:这个设置决定了生产者在认为消息已经被成功发送之前需要等待多少个副本简直认。如果这个值为’all’,那么生产者会等待全部的副本都确认后才认为消息已经被成功发送。这可以保证在副本失败的情况下,消息不会丢失。
这些设置的组合可以确保在各种故障情况下,消息的顺序、可靠性和一致性都能得到保证。
ACL增长授权

因为集群开启了ACL认证,所以还需要开启幂等写的权限,执行以下命令进行开启:
  1. ./kafka-acls.sh --bootstrap-server kafka-m2wi5kig-headless.kafka-pro.svc.xadd.staff.xdf.cn:29092 --command-config m2wi5kig.properties --add --allow-principal
  2. User:kafka-m2wi5kig.plain1 --topic 'cdata_flink_kafka_test' --producer --idempotent
复制代码
–command-config 需要指定该集群的admin账号及密码,格式如下:
  1. security.protocol = SASL_PLAINTEXT
  2. sasl.mechanism = SCRAM-SHA-512
  3. sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="xxxx" password="xxxx";
复制代码
执行完之后,可以看到权限中已经包罗IDEMPOTENT_WRITE了:

用户重试了,不在报错,标题办理。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

卖不甜枣

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表