2016-11-12 66 views
1

是否有可能notifyConsumer,一旦Producer发布到Kafka topic的所有数据?Spark Streaming - 生产者完成后,如何通知消费者?

有可能相同的数据(有一些独特的领域)可用于多个分区,所以我需要分组数据并做一些计算。

我想为此使用Sliding window,但问题仍然是我们不知道生产者是否完成发布数据?

消息数量为around 50K,如果我们有更好的配置代理,卡夫卡可以在几秒内处理50K messages[Single partition]

目前,我们计划有多个分区来根据Default Partitioner拆分数据。

任何有效的方法来处理?

更新:

每15分钟一次,生产者得到的数据,并开始发布数据卡夫卡的话题,我相信这是一个用例进行批处理,但是这是我们目前的设计。

+0

当你在谈论流时,不确定“done”是什么意思。是不是他们是无限期的流的整个点?如果您的制作人正在生成批量消息,并且您关心批量边界,那么您可能会发布“批量结束”消息。 –

+0

@JoePallas:我没有明白,你是什么意思,发布“批量结束”消息。 – Shankar

+1

生产者知道它何时完成一批处理,但消费者不知道它是否已经看到批处理中的所有消息。如果生产者在发布批次的所有数据后发布特殊的“批量结束”消息,则消费者可以等到在处理批次之前看到该消息。如果您有多个分区,这可能会变得更加复杂;标记必须去每个分区。 –

回答

1

Spark Streaming不起作用。它的工作方式是在每个批次间隔内流入和处理无限数据流。这意味着如果你想发出一个逻辑“批量结束”的信号,你需要发送一个消息,指出这批数据已经结束,允许你将处理过的消息发送到你想要的输出接收器。

您可以实现这一目标的一种方法是使用有状态的流,它可以跨批次聚合数据并允许您在批处理间隔之间保持状态。

+0

谢谢,你能给更多的信息或链接有状态流,所以我可以尝试一些.. – Shankar

+0

@Shankar你可以阅读[这篇博文](http://asyncified.io/2016/07/31/exploring-stateful -streaming-with-apache-spark)(免责声明:我是作者)。 –

+0

这个博客非常有用,谢谢你。 – Shankar