Scala 火花流+;Kafka集成:支持新主题订阅,而无需重新启动流媒体上下文
我正在使用spark流媒体应用程序(spark 2.1)来使用kafka(0.10.1)主题中的数据。我想订阅新主题,而无需重新启动流媒体上下文。有没有办法做到这一点 我可以在ApacheSpark项目中看到一张jira票Scala 火花流+;Kafka集成:支持新主题订阅,而无需重新启动流媒体上下文,scala,apache-spark,apache-kafka,spark-streaming,Scala,Apache Spark,Apache Kafka,Spark Streaming,我正在使用spark流媒体应用程序(spark 2.1)来使用kafka(0.10.1)主题中的数据。我想订阅新主题,而无需重新启动流媒体上下文。有没有办法做到这一点 我可以在ApacheSpark项目中看到一张jira票 (),即使它在2.0版本中关闭,我也找不到任何文档或示例来执行此操作。如果你们中的任何人对此很熟悉,请为我提供相同的文档链接或示例。提前谢谢 Spark 2.0.x和Kafka 0.10.x之间的集成支持订阅模式: SubscribePattern允许您使用正则表达式指定 兴
(),即使它在2.0版本中关闭,我也找不到任何文档或示例来执行此操作。如果你们中的任何人对此很熟悉,请为我提供相同的文档链接或示例。提前谢谢 Spark 2.0.x和Kafka 0.10.x之间的集成支持订阅模式: SubscribePattern允许您使用正则表达式指定 兴趣。请注意,与0.8集成不同,使用Subscribe或 SubscribePattern应在运行期间响应添加分区 小溪 您可以使用正则表达式模式注册到您想要的所有主题
class SubscribePattern[K, V](
pattern: java.util.regex.Pattern,
kafkaParams: java.util.Map[String, Object],
offsets: java.util.Map[TopicPartition, java.util.Long]
) extends ConsumerStrategy[K, V]
您可以订阅多个主题,如topic1、topic2等
val df = spark
.readStream
.format("kafka")
.option("kafka.bootstrap.servers", "host1:port1,host2:port2")
.option("subscribe", "topic1,topic2")
.load()
有关详细信息,我发现此解决方案更适合我的目的。我们可以使用不同的数据流共享“StreamingContext”实例。为了更好地管理,我们可以使用相同的流上下文为每个主题创建单独的“dStream”实例,您可以将此“dStream”实例与其主题名称一起存储在地图中,以便以后您可以停止或取消订阅该特定主题。请参阅下面的代码以了解更多信息
我想动态订阅主题,而不停止应用程序。从多个主题开始消费是非常简单的。尝试使用subscribePattern。这可能会解决你的问题。我试过这个例子,这不符合我的目的。SubscribePattern将根据正则表达式订阅所有可用的主题。但是,如果我在启动应用程序后添加一个主题,它属于同一个正则表达式,那么它将不会被同一个流使用。可能是我的方法错了。@Shemeem它应该支持动态添加主题。您确定您的新主题与正则表达式匹配吗?是的,我确定,它仅在启动stream.val pattern=pattern.compile(“topic.*)时使用这些主题中的内容;val consumerStrategy=ConsumerStrategies.SubscribePattern[String,String](模式,kafkaParams);val stream=KafkaUtils.createDirectStream[String,String](ssc,PreferConsistent,consumerStrategy)最初我只有两个主题topicA和topicB,它从这些主题中消费。然后我添加了topicX并生成了一些数据,但它从未被使用过。但下一次应用程序开始使用这三个主题时,您是否在不停止流上下文或驱动程序的情况下实现了订阅和取消订阅主题?如果是的话,你能分享一个示例页面吗?这个页面给出了如何启动多个数据流,这从来都不是问题。。您是如何停止或取消订阅该主题的,以及如何在不停止应用程序或内容的情况下重新订阅该主题的