java - 处理(Drop and Log) Kafka producer 发布的不良数据,这样 Spark (Java) Consumer 不会将其存储在 HDFS 中
问题描述
目前,我正在使用 Java 内置的 Spark Consumer 读取 Kafka Producer 发布的记录(json)并将其存储在 hdfs 中。如果假设我的记录具有以下属性(id、名称、公司、发布日期),目前,我正在处理异常,如果缺少其中一个属性,则程序将引发运行时异常,其中的日志消息显示其中之一该属性丢失,但问题是,由于异常,整个火花作业完全停止。我想通过避免这种情况来处理这些不良记录,这样程序不会停止整个 Spark 作业,而是丢弃并记录这些不良记录而不是抛出异常。
解决方案
答案将基于意见。这是我会做的,
不要在日志文件中记录拒绝,因为这可能很大,您可能需要重新处理它们。而是为被拒绝的记录创建另一个数据集,并给出拒绝的理由。您的过程将产生 2 个数据集 - 好的数据集和拒绝的数据集。
尽管有可能,但不应将异常用于代码的控制流。我会使用谓词/过滤器/IF 条件的想法,它将检查数据并拒绝不符合谓词/过滤器/IF 条件的数据。
如果您使用异常,则将其绑定到处理单个记录而不是整个作业。最好避免这种想法。
推荐阅读
- c# - 在 Azure DevOps Server 2020 中优化 C# 代码覆盖率收集和发布
- python - 如何在文本文件的哪一行找到一个单词
- amazon-web-services - 在 AWS 上运行的 Spring Boot 应用程序中的 504 网关超时
- javascript - 如何从@material-ui 获取对 xgrid 组件的引用
- flutter - 谷歌字体,而粗体不会在 Flutter 应用程序中为 NumberFormat 呈现空格
- powerbi - Power BI 计算度量中某个值的出现次数
- c# - WPF Stylus 不触发事件,而 Touch 确实触发了手写笔事件
- node.js - 当要返回的列表取决于用户的权限时,REST URI 和 GET 请求的缓存
- reporting-services - SSRS Report 只返回单行输出而不是多页输出
- jenkins-pipeline - Jenkins 管道中的 Groovy 脚本 - java.lang.ClassCastException: