哪种Kafka消费产品最适合从所有TopicPartition采样数据?

时间:2018-10-05 21:59:15

标签: apache-kafka

我想从Kafka集群上的所有主题中抽取数据。 KStreams看起来很合适,因为它删除了很多样板。但是,似乎不适合在每个流中查询多个主题。

如果我有50个主题,并且具有不同的分区号,那么KStreams是使用每个主题分区中的某些消息的好方法吗?还是我应该写自己的kafkaconsumer?

1 个答案:

答案 0 :(得分:1)

除非您想使用某些KStreams功能,否则我建议您使用常规Java使用者API。从Kafka官方文档中,在Automatic Offset Committing下查看一个简单又肮脏的示例: https://kafka.apache.org/20/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html

 Properties props = new Properties();
 props.put("bootstrap.servers", "localhost:9092");
 props.put("group.id", "test");
 props.put("enable.auto.commit", "true");
 props.put("auto.commit.interval.ms", "1000");
 props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
 props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
 KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
 consumer.subscribe(Arrays.asList("foo", "bar"));
 while (true) {
     ConsumerRecords<String, String> records = consumer.poll(100);
     for (ConsumerRecord<String, String> record : records)
         System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
 }

上面的示例将同时使用主题foobar,而不管每个主题有多少分区。