首页 > 解决方案 > 如何确保 spark 结构化流处理 kafka 中的所有数据

问题描述

我开发了一个 Spark 结构化流应用程序,它从 Kafka 主题中读取数据,聚合数据,然后输出到 S3。

现在,我正在尝试找到应用程序正常运行所需的最合适的硬件资源,同时最大限度地降低成本。在知道输入大小的情况下,我几乎没有找到关于如何计算正确大小的 spark 集群的信息,因此我选择了试错策略。我用最少的资源部署应用程序并添加资源,直到 spark 应用程序以稳定的方式运行。

话虽如此,我如何确保 spark 应用程序能够处理其 Kafka 输入中的所有数据,并且该应用程序没有落后?是否有要寻找的特定指标?作业持续时间与触发处理时间?

谢谢您的回答!

标签: apache-sparkapache-kafkaspark-structured-streaming

解决方案


跟踪 kafka 消费者滞后。应该为您的 Spark 流式传输作业创建消费者组。

> bin/kafka-consumer-groups.sh --bootstrap-server broker1:9092 --describe --group test-consumer-group

  TOPIC                          PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG        CONSUMER-ID                                       HOST                           CLIENT-ID
  test-foo                       0          1               3               2          consumer-1-a5d61779-4d04-4c50-a6d6-fb35d942642d   /127.0.0.1                     consumer-1

如果你有像 prometheus 和 Grafhana 这样的度量保存和绘图工具

  1. 将所有 Kafka 指标(包括 Kafka 消费者延迟)保存到 prometheus/graphite
  2. 使用 Grafana 查询 prometheus 并将其绘制在图上

推荐阅读