第一个经纪人挂起后,某些卡夫卡主题未收到该消息

时间:2019-02-26 07:21:54

标签: spring-boot kotlin apache-kafka

我有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个分区

0 个答案:

没有答案