kafka消息堆积怎么解决?

你的笑靥 发表于: 2020-02-22   最后更新时间: 2020-02-22  

多个消费者同时消费同一个生产者生产的消息时其中一些消费者会消费之前几分钟的数据

kafka有一个生产者生产消息,会发送给多个消费者,现在有一个消费者可以消费到当前生产的的消息,别的消费者消费到的是5-6分钟之前的消息,这是什么原因?

kafka版本是2.11-2.1.1

在A类中发给topic一个时间戳
class A{
    public void send (){
        kafkaTemplate.send("topic",System.currentTimeMillis());
    }
}

分别在B和C中去获取这个时间戳,两个消费者获取到的时间戳是不同的.一个能获取到发送时候的时间戳一个只能获取到几分钟前发送的时间戳

class B{
    @KafkaListener(topics = "topic",groupId = "B")
    public void consumer(long time){
        log.info(time);
    }
}

class C{
    @KafkaListener(topics = "topic",groupId = "C")
    public void consumer(long time){
        log.info(time);
    }
}

A,B,C三个类分别属于不同的三个模块

设置偏移量auto-offset-reset的值为latest也还是不可以.
希望大佬帮我看看是什么问题.谢谢啦!



您需要解锁本帖隐藏内容请: 点击这里
本帖隐藏的内容




上一条: KAFKA配置SASL/SCRAM进行身份验证和acl权限管理报 ERROR SASL authentication failed using login context 'Client' with exception
下一条: 问下,大佬,怎么知道自己的消费者已经连上kafka呢?

  • 如果你想B 和 C 都消费topic的所有数据 可以这样指定不同的groupId 比如 B:@KafkaListener(topics = "topic",groupId = "B1") C:@KafkaListener(topics = "topic",groupId = "C1")

    你这个消费者注解里面的内容不全,建议贴全一点,如果两个消费者没设置groupId的话默认使用同一个groupId 而且订阅的topic是一个的话 topic中的每条消息只会发给B或者C中的一个,不会都发。建议你安装一下Kafka监控工具 比如kafka-manager,然后开通JMX监听,启动kafka-manager之后可以看到消费者的消费情况。