更新时间:2022-02-21 GMT+08:00

客户端使用建议

  • 生产消息
    • 消息发送失败需要有重试机制。

      建议重试3次,通过参数:retries=3 配置。

    • 生产的callback函数不能阻塞,否则会阻塞客户端消息的发送

      对于时延敏感消息,设置发送优化:linger.ms=0。

      生产端的JVM内存要足够,避免内存不足导致发送阻塞。

  • 消费消息
    • consumer的owner线程需确保不会异常退出,否则会导致客户端没有发起消费请求,阻塞消费。
    • 使用长连接poll模式消费消息,不要消费结束就关闭consumer通道,这样会导致频繁rebalance,阻塞消费。
    • consumer需周期性poll(建议间隔为200毫秒),维持和server端的心跳,避免因为心跳超时导致consumer频繁加入和退出,阻塞消费。
    • 消费线程退出要调用consumer的close方法,避免同一个组的其他消费者阻塞sesstion.timeout.ms的时间。
    • consumer的session根据业务情况设置一个合理值,如30秒:session.timeout.ms=30000。
    • consumer数量不能超过topic的分区数,否则会有consumer拉取不到消息。
    • 确保处理完消息后再做消息commit,避免业务消息处理失败,无法重新拉取处理失败的消息。
    • consumer拉取的消息本地缓存应有大小限制,避免OOM(内存溢出)。
    • Kafka不能保证消费重复的消息,业务侧需保证消息处理的幂等性。