我正在寻找使用kafka反应器消耗具有特定偏移量的消息。
基于KafkaReceiver
界面,我们可以通过调用<T> Mono<T> doOnConsumer(Function<Consumer<K, V>, ? extends T> function);
对与KafkaReceiver关联的消费者进行一些操作
这是我的用法示例:
KafkaReceiver.create(
receiverOptions
.subscription(setOf(topicName))
)
.doOnConsumer { consumer ->
consumer.partitionsFor(topicName)
.map { partitionInfo -> Pair(TopicPartition(topicName, partitionInfo.partition()), Instant.parse("2019-10-27-T00:00:00Z").toEpochMilli()) }
.toMap()
.let(consumer::offsetsForTimes)
}
.flatMapMany { offsetsForTimes ->
val options = receiverOptions
.subscription(setOf(topicName))
.addAssignListener { partitions ->
partitions.map { partion ->
offsetsForTimes[partion.topicPartition()]
?.offset()
?.let(partion::seek)
}
}
KafkaReceiver.create(options)
.receiveAutoAck()
}
.flatMap { it }
.map { record -> doingSomething() }
.onErrorContinue { exception, _ -> logger.error(exception)}
.doOnNext { data -> logger.info("ok ", data)}
.subscribe()
当我运行该应用程序时,我得到一个nullPointerException
...
Caused by: reactor.core.Exceptions$ErrorCallbackNotImplemented: java.lang.NullPointerException
Caused by: java.lang.NullPointerException: null
...
有人可以告诉我如何使用kafka反应器来消耗具有特定偏移量的记录吗?使用
kafka offsetsForTimes。
谢谢。
Kafka Reactor版本:1.2.0.RELEASE
春季启动版本:2.1.9.RELEASE