所以我在使用Spark Streaming时Kafka Sinks遇到问题,同时将JSON发送到多个主题和不可靠的kafka经纪人。以下是代码的一些部分:
val kS = KafkaUtils.createDirectStream[String, TMapRecord]
(ssc,
PreferConsistent,
Subscribe[String, TMapRecord](topicsSetT, kafkaParamsInT))
然后我迭代RDD的
kSMapped.foreachRDD {
rdd: RDD[TMsg] => {
rdd.foreachPartition {
part => {
part.foreach { ...........
在foreach中我做了
kafkaSink.value.send(kafkaTopic, strJSON)
kafkaSinkMirror.value.send(kafkaTopicMirrorBroker, strJSON)
当镜像代理关闭时,整个流应用程序正在等待它,我们不会向主代理发送任何内容。
你会怎么处理它?</ p>
对于你提出的最简单的解决方案,想象一下,我只是跳过那些意图发送给失败的经纪人的消息(例如,那是CASE 1)
对于CASE 2,我们会做一些缓冲。
P.S。稍后我将使用Kafka Mirror,但目前我没有这样的选项,所以我需要在我的代码中做一些解决方案。
答案 0 :(得分:0)
我已经找到了这个问题的几个决定:
spark.task.maxFailures
属性中描述多次重启坏任务。可以增加重试次数。如果最大重试后流式传输作业失败,则只有在代理可用时才会从检查点重新启动作业。或者你可以manually stop the job when it fails。spark.streaming.backpressure.enabled=true
。