apache-kafka - 如何在进入大型集群中的下一个节点之前检查 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,我可以查询那些特定节点的完整健康状态?
奖励:监控主题的复制不足
也许还可以使用这些工具检查复制不足的主题/分区?如果阈值太低,请暂停直到副本计数恢复,然后再继续滚动重启。
解决方案
推荐阅读
- kestrel-http-server - Kestrel 服务器日志在哪里?
- javascript - 选定日期后 3 天自动在字段中显示日期
- c# - 获取选定选项卡文本的事件处理程序在后台更新线程中引发错误
- reactjs - 如何在移动屏幕中将组件移动到中心反应
- javascript - 如果我的字符串测试函数的输入为空,则返回 false
- asp.net-core - 将子域重定向到子目录(.Net Core App)
- python - ModuleNotFoundError:没有名为“psycopg2.errors”的模块
- sql-server - MS SQL Server 时间历史保留清理间隔
- python - 如何更改此代码以在 GUI tkinter 中工作?
- swift - 在这里,我试图将数据存储在 Swift4 的文本文件中,但它不起作用