我想从kafka集群的所有主题中抽取数据样本。kstreams看起来很合适,因为它去掉了很多锅炉板。但是,它似乎不适合在每个流中查询多个主题。如果我有,比方说,50个主题,具有不同的分区号,那么kstream是一种从每个主题分区消费一些消息的好方法吗?还是我应该写我自己的Kafka小说?
h5qlskok1#
除非您想使用一些kstreams功能,否则我建议您使用常规的javaconsumerapi。从Kafka的官方文件来看 Automatic Offset Committing 举个又快又脏的例子:https://kafka.apache.org/20/javadoc/index.html?org/apache/kafka/clients/consumer/kafkaconsumer.html
Automatic Offset Committing
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()); }
上面的例子将使用主题 foo 以及 bar 同时,不管每个主题有多少个分区。
foo
bar
1条答案
按热度按时间h5qlskok1#
除非您想使用一些kstreams功能,否则我建议您使用常规的javaconsumerapi。从Kafka的官方文件来看
Automatic Offset Committing
举个又快又脏的例子:https://kafka.apache.org/20/javadoc/index.html?org/apache/kafka/clients/consumer/kafkaconsumer.html上面的例子将使用主题
foo
以及bar
同时,不管每个主题有多少个分区。