apache-spark - 如何确保 spark 结构化流处理 kafka 中的所有数据
问题描述
我开发了一个 Spark 结构化流应用程序,它从 Kafka 主题中读取数据,聚合数据,然后输出到 S3。
现在,我正在尝试找到应用程序正常运行所需的最合适的硬件资源,同时最大限度地降低成本。在知道输入大小的情况下,我几乎没有找到关于如何计算正确大小的 spark 集群的信息,因此我选择了试错策略。我用最少的资源部署应用程序并添加资源,直到 spark 应用程序以稳定的方式运行。
话虽如此,我如何确保 spark 应用程序能够处理其 Kafka 输入中的所有数据,并且该应用程序没有落后?是否有要寻找的特定指标?作业持续时间与触发处理时间?
谢谢您的回答!
解决方案
跟踪 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 这样的度量保存和绘图工具
- 将所有 Kafka 指标(包括 Kafka 消费者延迟)保存到 prometheus/graphite
- 使用 Grafana 查询 prometheus 并将其绘制在图上
推荐阅读
- asp.net-mvc - 在控制器 [ASP.Net MVC] 中动态检查验证
- php - 使用php替换多种格式的电话前缀
- php - 如何从 Laravel 5.5 中的 DB Json 值比较和获取数据
- javascript - 将图像上传到firebase没有错误,但图像没有出现在存储中
- c++ - 移动后是否需要重置 std::list ?
- vba - 无法处理不同工作表上的命令
- amazon-web-services - 使用自动缩放为 AWS Elasticbeanstalk 上的 Google Places API 密钥限制创建静态 IP
- python - Why is aiohttp horribly slower than gevent?
- android - 我们可以停止 evrencoskun TableView 在 android 中的垂直滚动吗?
- minizinc - minizinc修复功能有什么用?