kafka消息堆积怎么解决?

你的笑靥 发表于: 2020-02-22   最后更新时间: 2020-02-22 19:09:32   7,981 游览

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

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也还是不可以.
希望大佬帮我看看是什么问题.谢谢啦!

发表于 2020-02-22

如果你想 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之后可以看到消费者的消费情况。

不好意思,我@KafkaListener中的内容没有贴全,修改了一下问题

半兽人 -> 你的笑靥 4年前

@慕容紫枫 说的方案是对的,问题解决了吗?

你的笑靥 -> 半兽人 4年前

我提问之前的情况就是他说的那样,但是kafka就是会出现滞后消费

你的答案

查看kafka相关的其他问题或提一个您自己的问题