在我工作的公司,我们使用没有身份验证的Spring for Kafka
,最近我们做了一些实验来设置Kafka的安全性,我们在一小段时间内启用了身份验证,这导致我们微服务中的所有消费者/生产者崩溃!(微服务保持运行)
例外:
Authorization Exception and no authorizationExceptionRetryInterval set
org.apache.kafka.common.errors.GroupAuthorizationException: Not authorized to access group: foo-group
经过一番研究,我们发现这是kafka客户端的预期行为,我们需要设置authorizationExceptionRetryInterval
属性
public void setAuthorizationExceptionRetryInterval (java.time. interval)持续时间authorizationExceptionRetryInterval)
设置AuthorizationException后重试的时间间隔由kafkconsumer抛出。缺省情况下,该字段为空,重试次数为空禁用。在这种情况下,容器将停止。的时间间隔必须小于max.poll.interval.ms消费者属性。
这里是其他一些有用的链接
为Spring Kafka设置authorizationExceptionRetryInterval
为什么当一个主题授权失败时,spring kafkconsumer会挂起n个主题的所有消费
我想知道的是:
- 是认证失败的唯一情况消费者/生产者下降?
- 如果有其他情况,如何确保我们的消费者/生产者在没有人为干预(重新启动)的情况下恢复微服务)?换句话说,如何检查是否消费者/生产者启动并重新启动它们?
容器仅在以下情况下停止:
AuthorizationException
无authorizationExceptionRetryInterval
NoOffsetForPartitionException
-当ConsumerConfig.AUTO_OFFSET_RESET_CONFIG
不是earliest
或latest
时抛出,并且该消费组的分区没有存在的偏移量。FencedInstanceIdException
-使用事务和静态组成员(意味着其他实例正在使用此实例id)。StopAfterFenceException
-当stopContainerWhenFenced
为true时(默认为false) -仅适用于 事务- 任意
Error
(如OOME)