为什么KafkaUtils.createStream()的“ topics”参数是Map而不是数组?

时间:2019-06-05 08:05:59

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

文档中的定义

  

org.apache.spark.streaming.kafka

     

KafkaUtils类

static JavaPairReceiverInputDStream<String,String> createStream(JavaStreamingContext jssc, String zkQuorum, String groupId, java.util.Map<String,Integer> topics)
  

创建一个输入流,以从Kafka Brokers中提取消息。

为什么主题是Map(而不是字符串数组)?

我知道字符串键是主题名称。但是整数值呢?我应该填写什么?

3 个答案:

答案 0 :(得分:3)

阅读Javadoc

  

公共静态JavaPairReceiverInputDStream createStream(JavaStreamingContext jssc,                                                          字符串zkQuorum,                                                          字符串groupId,                                                          java.util.Map主题)

     

创建一个输入流,以从Kafka Brokers中提取消息。数据的存储级别将是默认的StorageLevel.MEMORY_AND_DISK_SER_2。

     

参数:      jssc-JavaStreamingContext对象

     

zkQuorum-Zookeeper仲裁(主机名:端口,主机名:端口,..)

     

groupId-该使用者的组ID

     

topics-要使用的(topic_name-> numPartitions )的映射。 每个分区都在其自己的线程中使用

     

返回:      (Kafka消息密钥,Kafka消息值)的DStream

Map的值是给定主题名称的分区数,它确定将用于消耗该主题的线程数。

答案 1 :(得分:3)

如果您看到createStream hereKafkaUtils方法的文档,则会看到

  

topics-要使用的(topic_name-> numPartitions)的映射。每个分区都在其自己的线程中使用

整数值是主题的分区数,作为地图中键的一部分。

答案 2 :(得分:1)

来自Javadoc:https://spark.apache.org/docs/1.3.0/api/java/index.html?org/apache/spark/streaming/kafka/KafkaUtils.html

topics-要使用的(topic_name-> numPartitions)的映射。每个分区都在其自己的线程中使用

所以每个数字都是您要用于该主题的分区数