首页 > 解决方案 > 如何在进入大型集群中的下一个节点之前检查 Kafka 节点重启是否完全健康?

问题描述

是否有更深入的查询或端点我可以让 Kafka 告诉我它已经全部赶上了分区,它已经重新加入集群并且它可以与所有列出的代理和 Zk 节点对话 - 并且没有 Java 异常日志?

也许我可以找到一个关键的日志条目?像[GroupCoordinator ####]: Assignment received from leader for group X什么?但也有一些这样的消息。

更多细节

目前,我们将 Chef 自动化用于有状态的盒子,将 Kubernetes 用于我们的容器版本——所有这些都在启动时进行大量 TCP 端口健康检查,当端口可用时,移动到下一个节点。

然而,我们已经看到节点已经准备好它们的端口——在它们完成追赶或移动分区之前。这是一个问题,因为当我们将 Replica 因子设置为 3,并且假设连续重新启动 3 个节点时,如果在此期间接收到数据,这些分区可能会丢失。或其他部分,例如 3 个副本中只有 1 个可用,因此该节点开始复制到其他节点上 - 而其他节点又回来了(这似乎完全随机,因为某些分区的使用比其他分区多得多)。或者许多其他条件使其无法正常运行,例如不与 Zk 通信的 java 异常、SSL 证书过期、Fetcher 问题等。

例如,今天我正在监视日志,以了解所有 50 多个 ReplicaFetcherThread 在移动到下一个节点之前何时关闭。在这个流行音乐中,那个时间大约是 2-5 分钟。然而,在另一个可能需要 20 分钟的流行音乐中!

配置

我们运行各种配置,但大多数都有这些类型的设置(通过各种调整):

controlled.shutdown.enable=true
controlled.shutdown.max.retries=3
controlled.shutdown.retry.backup.ms=5000
default.replication.factor=3
group.max.session.timeout.ms=60000
group.min.session.timeout.ms=10000
num.partitions=5
num.replica.fetchers=4
session.timeout.ms=30000

Kafka 目前为 0.10.2.1,因为我们拥有的服务器和订阅者的数量很难更新(在 1/2 打 PoP 中超过 200 多个)。但是,如果有人可以证明较新版本具有某种类型的 Health 或 Status 端点,或者可以查询服务器的运行状况并调用所有分区的方法,我们将努力升级到该版本。

外部工具?

我们还在大多数流行音乐中运行 Kafka Manager 和 Burrow。也许那些有一个 API,我可以查询那些特定节点的完整健康状态?

奖励:监控主题的复制不足

也许还可以使用这些工具检查复制不足的主题/分区?如果阈值太低,请暂停直到副本计数恢复,然后再继续滚动重启。

标签: apache-kafkayahoo-kafka-manager

解决方案


推荐阅读