Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何通过Spark结构化流媒体确保kafka数据摄取不会丢失数据?_Apache Spark_Apache Kafka_Spark Streaming_Kafka Consumer Api - Fatal编程技术网

Apache spark 如何通过Spark结构化流媒体确保kafka数据摄取不会丢失数据?

Apache spark 如何通过Spark结构化流媒体确保kafka数据摄取不会丢失数据?,apache-spark,apache-kafka,spark-streaming,kafka-consumer-api,Apache Spark,Apache Kafka,Spark Streaming,Kafka Consumer Api,我有一个长期运行的spark结构化流媒体工作,它正在接收kafka数据。我有一个问题如下。如果作业因某种原因失败,稍后重新启动,如何确保在作业重新启动时从断点接收kafka数据,而不是始终接收当前和以后的数据。我是否需要明确指定消费群体和auto.offet.reset等内容?它们是否在spark kafka摄入中得到支持?谢谢 根据《星火》杂志的报道,星火本身正在跟踪补偿,没有补偿提交给卡夫卡。这意味着,如果Spark流作业失败并重新启动,则有关偏移量的所有必要信息都将存储在Spark的检查点

我有一个长期运行的spark结构化流媒体工作,它正在接收kafka数据。我有一个问题如下。如果作业因某种原因失败,稍后重新启动,如何确保在作业重新启动时从断点接收kafka数据,而不是始终接收当前和以后的数据。我是否需要明确指定消费群体和auto.offet.reset等内容?它们是否在spark kafka摄入中得到支持?谢谢

根据《星火》杂志的报道,星火本身正在跟踪补偿,没有补偿提交给卡夫卡。这意味着,如果Spark流作业失败并重新启动,则有关偏移量的所有必要信息都将存储在Spark的检查点文件中。这样,您的应用程序将知道从何处中断并继续处理剩余的数据

我已经写了更多关于设置
group.id
和Spark在另一个数据库中检查偏移量的细节

以下是Spark结构化流媒体作业最重要的卡夫卡特定配置:

group.id:Kafka source将为每个查询自动创建唯一的组id。根据代码,
group.id
将自动设置为

自动.offset.reset:设置源选项startingoffset以指定从何处开始。结构化流媒体管理内部消耗的偏移量,而不是依赖卡夫卡消费者来完成

启用.auto.commit:卡夫卡源不提交任何偏移量


因此,在结构化流媒体中,目前无法为Kafka消费者定义自定义group.id,结构化流媒体正在内部管理偏移量,而不是提交回Kafka(也不是自动提交)。

谢谢,我说的是消费。只需设置消费者组id,以确保在spark作业失败时保持偏移量。我的星火是2.4.6。卡夫卡自由党是0.10。当我设置group.id时,我得到以下错误“线程中的异常”main“java.lang.IllegalArgumentException:Kafka选项'group.id'不受支持,因为用户指定的使用者组不用于跟踪偏移量。”谢谢mike,但我仍然有些困惑。看看链接,它清楚地提到“kafka.group.id”是可以设置的,只是需要非常小心。我想知道Kafka consumer的自定义group.id是不可能的,还是仅在某些最新版本(如3.0.0)中可能。感谢
卡夫卡消费者在阅读卡夫卡时使用的卡夫卡组id。小心使用。默认情况下,每个查询为读取数据生成一个唯一的组id
yes,仅在v3中可能,在2.4.6中不可能。另外,请看你的另一篇文章中给出的关于类似主题的答案。谢谢迈克。是的,我以前也问过一个类似的问题,但还不是很确定。我是否可以理解,如果在v3中设置kafka.group.id时以下假设是正确的?1) 卡夫卡经纪人将能够按照卡夫卡标准自行维持抵消。2) 自定义组id将覆盖spark维护的内部组id,以提交给kafka broker。3) Spark将自动提交回卡夫卡。我不需要做任何其他事情来避免数据丢失,例如手动提交偏移量等。对吗?谢谢提醒。我是个新手,所以我忘了接受答案。这是真的。根据你的评论,我现在已经接受了。对于大多数问题,我以前也投票过。对我来说,我尊重人们在回答我的问题时给予的帮助。至于我下面的问题,我也以“谢谢”开头。至于类似的问题,我也解释过,这只是为了进一步证实。即使在您的回答中,您也提到“目前无法定义您的自定义组.id”,因此我想再次确认spark 3.0是否支持它,以及如何支持它。
val uniqueGroupId = s"spark-kafka-source-${UUID.randomUUID}-${metadataPath.hashCode}