一看就会的kafka多线程顺序消费【内附Demo哦】
发布网友
发布时间:2024-10-09 00:11
我来回答
共1个回答
热心网友
时间:2024-10-22 12:19
Kafka是一个分布式消息流平台,支持多分区、多副本,基于Zookeeper。本文将重点讨论Kafka在consumer是单线程与多线程情况下如何保证顺序消费。
单线程顺序消费中,为了避免流量瞬间压垮服务,将订单生成逻辑与支付逻辑包装成MQ消息发送到Kafka中,以防止积压消息。为了保证订单生成与支付的严格先后顺序,消息应发送到同一个topic的同一个分区。消息在分区内按生成顺序有序,一个分区对应一个消费者,确保顺序性。
多线程顺序消费中,为提升处理速度,通过增加消费者以横向扩展分区数。然而,这需要在消费者端进行并发处理。若直接将消息放入线程池,则线程处理速度不均会导致不合理的顺序。通过将接收到的消息进行hash取模,发送到不同队列,开启多个线程分别消费,实现并发处理下的顺序消费。
多线程消费代码实现通过初始化对应业务的顺序消费线程池,监听类拉取消息至线程池对应队列,线程池线程处理任务数据,并在处理完任务后提交offsets标识。监听类校验提交的offsets数与拉取记录数,若相等则手动提交offset。
在多线程消费中,通过配置中心动态调整线程池参数以实现动态扩容与缩容,满足不同时间段的处理需求。配置中心刷新监听类中线程池并发级别的值,通过设置线程池的停止属性实现线程池的动态调整。
本文介绍了Kafka单线程与多线程顺序消费的思路,通过将消息绑定到定向的分区或队列确保顺序性,并通过增加分区或线程提升消费能力。最后提供了通过配置中心动态调整线程池参数的实现思路。