恒定的 ISR 收缩和扩展

Constant ISR shrinking and expanding

我们有一个包含 5 个代理和 3 个动物园管理员的 Apache Kafka 集群。 Zokeeper 是 3.14.3 版本,broker 是 2.0.0。 我已经尝试了很长时间来理解为什么代理会与集群断开连接——我得到了几十个 "shrinking ISR from x,y to x" 并且在每个分区的每个分区 "expanding ISR from x to x,y" 之后几秒钟话题。 例如,

Nov 17 10:06:06 HOSTNAME kafka-server-start.sh[17252]: [2019-11-17 10:06:06,188] INFO [Partition topicname-14 broker=1] Expanding ISR from 1 to 1,3 (kafka.cluster.Partition)

"expand" 日志在 "shrink" 日志后约 7 秒到达,并且每 1-5 分钟重复一次

06:54:27 - 缩小 >

06:54:32 - 展开

06:55:47 - 缩小 >

06:55:52 - 展开

06:57:07 - 缩小 >

06:57:13 - 展开

07:01:27 - 缩小 >

07:01:36 - 展开

我在动物园管理员方面没有发现任何异常,在其他日志文件中也没有任何异常(controller.log、state-change.log、kafka-authorizer)而这些显示在 server.log 文件中。

经纪人之间的负载非常平衡,我们最近又添加了 2 个经纪人,但问题是在添加之前。没有经纪人似乎过于紧张或其他任何事情,而且他们都在配置方面保持一致。

这是经纪人的server.properties:

ssl.key.password=XXXX
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
ssl.keystore.password=XXXX
advertised.listeners=SASL_SSL://HOSTNAME.FQDN:9092
ssl.keystore.location=/etc/kafka/secrets/kafka.keystore.jks
ssl.keystore.filename=kafka.keystore.jks
zookeeper.connect=A:2181, B:2181, C:2181
security.inter.broker.protocol=SASL_SSL
super.users=User:admin
ssl.truststore.credentials=keystore_creds
jmx.port=9999
ssl.keystore.credentials=keystore_creds
log.roll.hours=24
ssl.truststore.location=/etc/kafka/secrets/kafka.truststore.jks
delete.topic.enable=TRUE
message.max.bytes=2097152
ssl.truststore.password=XXXX
broker.id=1
ssl.key.credentials=keystore_creds
log.dirs=/var/lib/kafka/data
ssl.truststore.filename=kafka.truststore.jks
listeners=SASL_SSL://IPADDRESS:9092
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
log.retention.ms=86400000
log.retention.bytes=536870912000
auto.create.topics.enable=false
zookeeper.session.timeout.ms=10000
num.partitions=18
default.replication.factor=2

数据确实成功进出集群,我的问题是每次发生这种情况时生产者都与我的服务器断开连接并且分区的收缩和扩展必须对系统造成很大的成本并且它会导致生产者排队增长直到他们的本地队列变满。 生产者配置为连接到 VIP,而不是服务器阵列或特定服务器。

如果我可以提供任何其他信息来帮助研究问题的原因,请告诉我, 谢谢

阅读本文后 - https://www.confluent.io/blog/hands-free-kafka-replication-a-lesson-in-operational-simplicity/ - 我已将 replica.lag.time.max.ms 增加到 20,000(从默认的 10,000),现在 ISR 扩展和收缩停止了

涉及的因素很多尝试增加以下参数

  1. replica.lag.time.max.ms 如果一个follower没有发送任何fetch请求或者至少这次没有消耗leader的log end offset,leader将从isr

  2. 中删除这个follower
  3. zookeeper.session.timeout.ms
    如果消费者在这段时间内未能向 ZooKeeper 发出心跳,则认为它已死,将发生重新平衡。

  4. 减少主题复制因子以防高复制因子满足 ISR 的更多时间