动态更新spark kafka使用者的主题列表

时间:2016-09-20 18:03:02

标签: apache-spark apache-kafka spark-streaming

是否可以动态更新spark-kafka消费者中的主题列表?

我有一个使用spark-kafka消费者的Spark Streaming应用程序。 最初说我有spark-kakfa消费者倾听主题:[" test"]并且过了一段时间我的主题列表更新为[" test"," testNew" ]。现在有办法更新spark-kafka消费者主题列表,并要求spark-kafka消费者使用数据来获取更新的主题列表,而无需停止sparkStreaming应用程序或sparkStreaming上下文

4 个答案:

答案 0 :(得分:1)

  

是否可以在spark-kafka使用者中动态更新主题列表

没有。使用KafkaUtils初始化kafka流后,接收器和无接收器方法都将得到修复。随着DAG的修复,您无法随时传递新主题。

如果要动态阅读,可以考虑批量k 迭代计划的工作,可以动态地读取主题并从中创建RDD

另一个解决方案是使用一种技术,让您在消费方面具有更大的灵活性,例如Akka Streams。

答案 1 :(得分:0)

正如Yuval所说,这是不可能的,但如果您知道从Kafka处理的数据的结构/格式,可能会有一个解决方法。

例如,

  • 如果您的流媒体应用正在收听主题[“test”,“testNew”]
  • 向下添加一个名为[test4]的新主题的行,作为解决方法,您只需向其中包含的唯一键添加一个唯一键,并将其传递给现有主题。
  • 设计您的流式传输应用程序,以便根据您添加到该test2数据的密钥识别/过滤数据

答案 2 :(得分:0)

您可以使用基于线程的方法
1.使用包含主题列表的任何数据结构定义Cache 2.在此缓存中添加元素的方法
你必须得到A级和B级,其中B具有所有与火花相关的逻辑 4 A类是长期运行的工作,A来自A,你正在呼叫B,每当有新主题你刚刚用B生成新线程时

答案 3 :(得分:-1)

我建议您从最新的ConsumerStrategies.SubscribePattern API版本中尝试Spark-Kafka integration (0.10)

这看起来像是:

KafkaUtils.createDirectStream(
mySparkStreamingContext,
PreferConsistent,
SubscribePattern("test.*".r.pattern, myKafkaParamsMap))