如何用RabbitMQ和Apache Spark来消息?

时间:2016-02-23 19:03:56

标签: apache-spark rabbitmq spark-streaming

我从RabbitMQ经纪人那里收到消息。

如何在Spark动作(如foreach / foreachPartition)中发出ack或nack,以便稍后重试消息处理或者丢弃它?

我不能只传递deliveryTag,在动作中连接到兔子并发送确认,因为deliveryTag绑定到特定频道。

1 个答案:

答案 0 :(得分:1)

Spark任务通常在远程节点上运行。因此,任务与之交互的上下文中的所有对象应该对任务是私有的,或shared variables。在驱动程序节点上建立的RabbitMQ连接对象(实际上是任何类型的连接)都不会被传送到远程节点。因此,为了向RabbitMQ发送ack和noack,您需要在任务之外执行它,除非您在驱动程序节点上运行所有内容。

简而言之,尝试找到一种方法将消息消耗故障发送回驱动程序节点并让驱动程序节点发送所有的acks和noacks。