分布式消息服务KAFKA版-Kafka客户端使用建议:consumer使用建议

时间:2024-11-11 15:36:51

consumer使用建议

  1. consumer的owner线程需确保不会异常退出,避免客户端无法发起消费请求,阻塞消费。
  2. 确保处理完消息后再做消息commit,避免业务消息处理失败,无法重新拉取处理失败的消息。
  3. 通常不建议对每条消息都进行commit,如果对每条消息都进行了commit,会导致OFFSET_COMMIT请求过多,进而导致CPU使用率过高。例如:如果一个消费请求拉取1000条消息,每条都commit,则commit请求TPS是消费的1000倍,消息体越小,这个比例越大。建议隔一定条数或时间,批量commit,或打开enable.auto.commit,这样设置会存在一个缺点,即在客户端故障时,可能丢失一部分缓存的消费进度,导致重复消费。请根据业务实际情况,设置批量commit。
  4. consumer不能频繁加入和退出group,频繁加入和退出,会导致consumer频繁做rebalance,阻塞消费。
  5. 同一消费组内consumer数量不能超过该消费组订阅的分区总数,否则会有consumer拉取不到消息。
  6. consumer需周期poll,维持和server的心跳,避免心跳超时,导致consumer频繁加入和退出,阻塞消费。
  7. consumer拉取的消息本地缓存应有大小限制,避免OOM(Out of Memory)。
  8. consumer session设置为30秒,session.timeout.ms=30000。
  9. Kafka不能保证消费重复的消息,业务侧需保证消息处理的幂等性。
  10. 消费线程退出要调用consumer的close方法,避免同一个组的其他消费者阻塞session.timeout.ms的时间。
  11. 消费组名称开头不使用特殊字符(如#),使用特殊字符可能会导致 云监控 无法展示此消费组的监控数据。
support.huaweicloud.com/usermanual-kafka/Kafka-client-best-practice.html