我想按计划的时间间隔从Kafka主题中读取所有消息,以计算一些全局索引值。我正在做这样的事情:
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
props.put("group.id", "test")
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest")
props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG,Int.MaxValue.toString)
val consumer = new KafkaConsumer[String, String](props)
consumer.subscribe(util.Collections.singletonList(TOPIC))
consumer.poll(10000)
consumer.seekToBeginning(consumer.assignment())
val records = consumer.poll(10000)
使用这种机制,我可以获得所有记录,但这是一种有效的方法吗?每个主题将有大约20000000(2.1 GB)个记录。
答案 0 :(得分:1)
您可能会考虑使用Kafka Streams库来执行此操作。它支持不同类型的窗口。
您可以使用Tumbling窗口捕获给定内部事件并计算全局索引。
https://kafka.apache.org/20/documentation/streams/developer-guide/dsl-api.html#windowing