Apache Beam KafkaIO提及主题分区而不是主题名称

时间:2020-07-05 13:18:01

标签: apache-beam apache-beam-io apache-beam-kafkaio

Apache Beam KafkaIO支持kafka使用者仅从指定分区读取。我有以下代码。

KafkaIO.<String, String>read()
                .withCreateTime(Duration.standardMinutes(1))
                .withReadCommitted()
                .withBootstrapServers(endPoint)
                .withConsumerConfigUpdates(new ImmutableMap.Builder<String, Object>()
                        .put(ConsumerConfig.GROUP_ID_CONFIG, groupName)
                        .put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, 5)
                        .put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest")
                        .build())
                .commitOffsetsInFinalize()
                .withTopicPartitions(List<TopicPartitions>)

我有以下两个问题。

  1. 如何从kafka获取分区名称?我如何在kafkaIO中提及它?
  2. Apache Beam产生的kafka用户数量是否等于创建kafka用户时提到的分区列表?

1 个答案:

答案 0 :(得分:-1)

我自己找到了答案。

如何告诉kafkaIO从特定分区读取?

kafkaIO具有withTopicPartitions(List<TopicPartitions>)方法,该方法接受TopicPartition对象的列表。

主题分区被命名为从零开始的序号。因此,以下方法应该起作用

KafkaIO.<String, String>read()
                .withCreateTime(Duration.standardMinutes(1))
                .withReadCommitted()
                .withBootstrapServers(endPoint)
                .withConsumerConfigUpdates(new ImmutableMap.Builder<String, Object>()
                        .put(ConsumerConfig.GROUP_ID_CONFIG, groupName)
                        .put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, 5)
                        .put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest")
                        .build())
                .commitOffsetsInFinalize()
                .withTopicPartitions(Arrays.asList(new TopicPartition(topicName, 0),new TopicPartition(topicName, 1),new TopicPartition(topicName, 2)))

要对其进行测试,请使用kafkacat和以下命令

kafkacat -P -b localhost:9092 -t sample -p 0-此命令产生到指定的分区。

Apache Beam产生的kafka用户数量是否等于创建kafka用户时提到的分区列表?

它将生成一个单一的消费者组,其消费者数量与在kafka Producer对象的显式构建期间提到的分区数量相同。