java - 如果某些 Kafka 节点时间偏移不同步,Spark 流作业会卡住

标签 java apache-spark apache-kafka spark-streaming kafka-producer-api

我们有一个从 Gnip API 读取并将推文发送到 Kafka 集群的 Spark 流作业。

Kafka 集群是使用 Cloudera Manager 安装的。

有时,cloudera 管理器会显示某些 Kafka 节点的健康状况不佳消息。健康状况不佳消息与 NTP 服务有关。某些节点突然与 NTP 服务器不同步。

一旦发生这种情况,Spark streaming 作业就会卡住,大量作业排队等待很长时间。

为什么Kafka节点与NTP服务器的同步会影响spark streaming作业中的Kafka producer?

最佳答案

每个分区在 Kafka 代理中都有其领导者和追随者,Kafka 通过它们提供容错能力。该机制基于使用NTP服务的ZooKeeper。

如果你使用默认配置,leader会收到你的数据,并尽量写入followers。在数据写入每个跟随者之前,它不会响应成功消息。所以您的 Spark 应用程序会阻塞。

您还可以更改您的 Kafka 配置以在领导者收到数据时立即响应或在领导者将数据写入磁盘时立即响应。

您可以在 Kafka documents 中找到更多信息.

关于java - 如果某些 Kafka 节点时间偏移不同步,Spark 流作业会卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39312317/

相关文章:

Scala 和 Spark : how to go through an image?

sql - 在 awaitResult 中抛出 SPARK 异常

java - Apache 卡夫卡 : How to find out consumer group of a topic?

apache-spark - 在 join 和 reduceByKey 中触发执行程序内存不足

elasticsearch - 对于基于 Docker 容器的实现,在同一个容器内运行一对 Kafka 服务器和 Zookeeper 服务器是否有意义?

kubernetes - 无法使用无Kube Kafka触发器触发无Kubeless功能

java - 使类可序列化有什么用?

java - session ID 为空。调用 quit() 后使用 WebDriver?

java - 为什么我的制服位置显示不正确?

java - 如何在将转换为字符串的长变量中添加数字?