我有6位卡夫卡经纪人: Kafka1.fat:9092,kafka2.fat:9092,kafka3.fat:9092,kafka4.fat:9092,kafka5.fat:9092,kafka6.fat:9092, 我使用两个containerFactory配置了将近30个主题。两者之间的区别在于,一个是单线程的,相应的主题采用默认的30个分区。 另一个containerFactory是6个线程,具有6个分区的相应主题。一直都很好。 但是最近kafka1.fat坏了,然后我遇到了一些无法接收该消息的主题。通过调试,我发现单线程30个分区的主题无法接收到该消息,而6个分区的6个线程正常工作。 六个代理中的一个损坏了,不应影响消息的正常接收,为什么某些主题不会接收消息,我的配置是否有问题?
这是我的一些代码片段
@Bean
fun singleContainerFactory(consumerFactory : ConsumerFactory<Any,Any>): KafkaListenerContainerFactory<*> {
val containerFactory = ConcurrentKafkaListenerContainerFactory<Any, Any>()
containerFactory.consumerFactory = consumerFactory
containerFactory.setConcurrency(1)
containerFactory.isBatchListener = true //批量消费
containerFactory.containerProperties.ackMode = AckMode.MANUAL_IMMEDIATE
return containerFactory
}
单线程配置
class FileCountReceive: CommonReceive<JsonObject,JsonObject>() {
@KafkaListener(topics = [ParamType.ORBIT_FILE_COUNT.topic],containerFactory = "singleContainerFactory")
override fun receive(records: List<ConsumerRecord<Int, ByteArray>>, ack: Acknowledgment) {
super.receive(records, ack)
}
}
现在无法接收消息的单线程侦听器
@Bean
fun batchContainerFactory(consumerFactory : ConsumerFactory<Any,Any>): KafkaListenerContainerFactory<*> {
val containerFactory = ConcurrentKafkaListenerContainerFactory<Any, Any>()
containerFactory.consumerFactory = consumerFactory
containerFactory.setConcurrency(concurrency) //concurrency = 6
containerFactory.isBatchListener = true //批量消费
containerFactory.containerProperties.ackMode = AckMode.MANUAL_IMMEDIATE
return containerFactory
}
多线程配置(与单线程的唯一区别是线程数为6)
class YCReceive : CommonReceive<YCModel,SingleVisibleData>() {
@KafkaListener(topics = [ParamType.HAWKEYE_S.topic],containerFactory = "batchContainerFactory")
override fun receive(records: List<ConsumerRecord<Int, ByteArray>>, ack: Acknowledgment) {
super.receive(records, ack)
}
}
多线程侦听器
@Bean
fun yc() = NewTopic(ParamType.HAWKEYE_S.topic, 6, 2.toShort())
多线程主题都是6个分区