Kafka阅读该主题的所有消息

时间:2018-11-27 13:01:01

标签: scala apache-kafka kafka-consumer-api

我想按计划的时间间隔从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)个记录。

1 个答案:

答案 0 :(得分:1)

您可能会考虑使用Kafka Streams库来执行此操作。它支持不同类型的窗口。

  1. 翻滚时间窗口
  2. 跳跃时间窗口
  3. 滑动时间窗口
  4. 会话窗口

您可以使用Tumbling窗口捕获给定内部事件并计算全局索引。

https://kafka.apache.org/20/documentation/streams/developer-guide/dsl-api.html#windowing