作者回复: 消息堆积可能原因如下:1. 生产速度大于消费速度,这样可以适当增加分区,增加consumer数量,提升消费TPS;2. consumer消费性能低,查一下是否有很重的消费逻辑(比如拿到消息后写HDFS或HBASE这种逻辑就挺重的),看看是否可以优化consumer TPS;3. 确保consumer端没有因为异常而导致消费hang住; 4. 如果你使用的是消费者组,确保没有频繁地发生rebalance
主要排查下可能是哪些原因
作者回复: 我假设你指的名字是group.id。那么把A改成B对于Kafka而言就是新的consumer。新consumer从头还是从最新开始消费取决于auto.offset.reset的设置
作者回复: 磊总别闹:)
作者回复: 我的经验是先解决OOM的问题吧。至于commit 失败,通常是因为事件处理的速度太慢了
作者回复: 1. 实际上这个交由OS来决定,Kafka不管
2. 从拉取的方式。Kafka定义了水位的概念来标识拉取的进度
作者回复: 可以啊,你想在里面实现什么样的逻辑都行。
作者回复: onsend是producer进程下的线程;onConsume是consumer进程下的线程,它们不是一个进程。我说的是onSend和onAcknowledgement是一个进程下的多个线程。
作者回复: 是的,你是对的~ 其实放在哪个方法里面取决于你的计时逻辑:)
作者回复: 1. 确实有这个问题。用户自己来规避之
2. 同意~
3. 我们还是能保证消息不丢失的吧:)
作者回复: 单条消息
作者回复: 嗯嗯,分区坏了?
作者回复: Kafka本身也提供了一整套权限控制的逻辑。当然如果你这么用能满足你的需求,我觉得没有任何问题:)
作者回复: 可以复用你在Spring中创建的producer吗?
作者回复: 没什么太好的方法。你可以试试压缩。其实消息队列本不适合发送太大的消息体
作者回复: 这两个方法是在不同的线程中被调用的
作者回复: 默认情况下是消息发生时producer程序所在机器时钟