apache-spark - Spark 流 DirectKafkaInputDStream : kafka data source can easily stress the driver node

标签 apache-spark apache-kafka spark-streaming

我正在使用 Spark Streaming 1.5.0 构建原型(prototype)。 DirectKafkaInputDStream 被使用。

DirectKafkaInputDStream 从 kafka 读取的简单阶段无法处理大量消息。一旦消息速率达到或超过某个值,该阶段将花费比批处理间隔更长的时间。而且这个比率比我预期的要低得多。 (我用不同服务器中的多个消费者实例对我的 kafka 集群做了另一个基准测试)

JavaPairInputDStream<String, String> recipeDStream =
        KafkaUtils.createDirectStream(jssc, 
            String.class, 
            String.class, 
            StringKeyDecoder.class,
            StringDecoder.class,
            kafkaParams, kafkaTopicsSet);

看完这篇article ,我意识到 DirectKafkaInputDStream 与驱动程序在同一节点上运行。是真的吗?如果是这样,那么 DirectKafkaInputDStream 很容易受到压力,因为它读取一个节点中的所有消息,然后分派(dispatch)给所有执行程序。

这意味着 JavaPairReceiverInputDStream 在处理大量数据方面具有更好的性能,因为接收器在多个执行程序实例上运行。

我说的对吗?有人可以解释一下吗?谢谢。

最佳答案

不,直接流只是从驱动程序到 kafka 的通信,以便找到最新的可用偏移量。实际消息仅在执行程序上读取。

将 .createStream 切换为 .createDirectStream 通常应该表现得更好,而不是更差。如果您有一个相反的可重现的小例子,请在 spark 邮件列表或 jira 上分享它。

关于apache-spark - Spark 流 DirectKafkaInputDStream : kafka data source can easily stress the driver node,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32530547/

相关文章:

c# - Hadoop/Spark 上的 .NET 场景模拟(DAG 作业)的分布式计算

用于 Kafka 的 Azure 事件中心,具有来自同一组的 2 个消费者无限重新平衡

apache-spark - SparkContext.getOrCreate() 目的

sql-server - 无法连接到 SQLServer Kafka Connect

java - 检测 Kafka 集群已关闭的最佳方法是什么?

json - json 解析器的 Apache Spark 对象不可序列化异常

scala - Spark Streaming 累计字数

java - KafkaAvroDeserializer-NoClassDefFoundError : io/confluent/common/config/ConfigException

cluster-computing - Spark : Run Spark shell from a different directory than where Spark is installed on slaves and master

apache-spark - SparkSQL 下推过滤在 Spark Cassandra 连接器中不起作用