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>)
我有以下两个问题。
答案 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对象的显式构建期间提到的分区数量相同。