WannaRunning
这个作者很懒,什么都没留下…
展开
-
Kafka的Replication策略和ISR同步机制
而异步复制方式下,follower异步的从leader复制数据,数据只要被leader写入log就被认为已经commit,这种情况下如果follower都还没有复制完,落后于leader时,突然leader宕机,则会丢失数据。这个参数作用与Topic维度,指的是分区同步副本的数量控制,在replication异步复制模式下,生产者发送消息写入过程中,只有ISR中所有Replica都向Leader发送ACK时,leader才会执行commit。但是,Kafka的复制机制不是完全的同步复制,而是。原创 2023-07-05 21:05:06 · 1099 阅读 · 0 评论 -
Kafka中的consumer拦截器
之前的文章写了最后有提到,在执行真实的消费方法之前会调用消费者的拦截器处理消息,最后再交给RecordMessagingMessageListenerAdapter进行代理和反射调用消费方法。对于消费者,SpringBoot在整合方式中的spring-kafka并没有用原生的ConsumerConnector,,而是借助原生client的拉取消息功能做了自己的消费模型的实现,提供了@KafkaListener注解这种方式实现消费。原创 2023-06-19 09:20:46 · 695 阅读 · 0 评论 -
浅析Spring-kafka源码——消费者模型的实现
在使用Spring-kafka时,一般都是通过使用@KafkaListener注解的方法来实现消息监听和消费。今天写一下基于这个注解实现的消费端模型和实现的原理。原创 2023-06-17 13:31:51 · 2648 阅读 · 0 评论 -
Kafka中的producer拦截器
在Kafka中,拦截器一共有两种。分别是生产者端的和消费者端的。本文介绍生产者端的拦截器。原创 2023-06-16 13:45:14 · 1543 阅读 · 0 评论 -
记一次线上MQ堆积问题处理
下午1点后出现新一轮高峰,出现了大量消息堆积,堆积量超过两万。由于当前Topic分区较少,服务节点数量已经大于分区数,加服务节点没有意义。原因是Topic扩容后有12个分区,但是当前服务节点只有10个,存在两个服务节点各自消费两个分区的情况,导致原有的堆积消息无法尽快处理完。几分钟后,12个分区消息堆积都解决了,但此时仍处于高峰,所以lag数扔维持几十左右,观察后发现消费速度稳定,没什么问题。上午11.30左右一波下单高峰,根据分布式消息告警发现有少量消息堆积,但是堆积量不大,持续几分钟后恢复正常。原创 2023-06-02 21:01:36 · 467 阅读 · 0 评论 -
浅谈Kafka的架构设计
Kafka集群中的角色BrokerBroker可以理解为kafka服务端的实例,每个服务器上可以部署一个或多个Broker实例;在一个kafka集群内的broker都有一个不重复的集群内唯一标识。Topic消费主题,与其他消息中间件一样,在Kafka集群中的每个broker上都可以创建多个topic。Partition这个指的是Topic的分区,每个topic可以设置多个分区以提高kafka的吞吐量。同一个topic下的消息在不同的分区的数据是不重复的,partition的表现形式就原创 2022-05-04 16:01:26 · 1393 阅读 · 0 评论 -
Kafka消费自动和手动提交
目录自动提交开启自动提交全局配置手动提交开启手动提交全局配置个性化消费者配置手动提交自动提交自动提交可以很大程度上降低Kafka服务端的压力,并且减少客户端的网络开销。通常情况下都会设置开启自动提交模式。使用自动提交时要注意的地方:消费者的消费逻辑要做好业务幂等; 自动提交时间设置并不是非常严格,可能会大于设置的时间间隔;自动提交并不是严格地每间隔一段时间提交一次偏移量(旧版的客户端是有一个AutoCommitTask进行轮询提交),而是每次在调用 KafkaCo原创 2022-01-03 16:16:29 · 4360 阅读 · 0 评论 -
Kafka批量消费模式
Kafka默认的listener消费模式为single单消息模式,即一次消费一条消息。批量消费可以一次性消费到多条消息,如果是顺序不敏感的业务,可以另外开启线程池多线程处理这批消息,提高客户端处理效率。开启批量消费后消费方法也要以List集合去接收ConsumerRecord参数才能得到批量的消息集合。 处理逻辑需要做好业务幂等;因为当一批消息里有个别消息处理失败,重试时需要取这批消息中出现失败的且索引最小的那条进行重试,有可能会导致中间又没处理失败的消息也被重试。 批量消费模式下如果使用重试原创 2022-01-03 16:05:50 · 4297 阅读 · 0 评论 -
浅谈Kafka消费模型与集群和广播消费的实现
集群消费默认情况下Kafka中同一个topic下的消息对于某一个消费组来说是集群消费模式,也就是只会被组内一个消费实例所消费。广播消费同一个topic下的消息被多个消费者消费称为广播消费.由于Kafka默认是集群消费模式,所以广播消费的实现方式就是为广播消费的多个应用实例都设置不同的GroupId即每个实例都是单独的消费组.@KafkaListener注解的GroupId属性支持SpEL表达式,可以通过这个实现每个应用实例都是单独的消费组,进而实现广播消费。@KafkaListen原创 2021-12-23 15:59:15 · 7610 阅读 · 3 评论 -
Kafka消费失败重试处理
默认情况下,Spring-Kafka 达到配置的重试次数时,【每条消息的失败重试时间,由配置的时间隔决定】Consumer 如果依然消费失败 ,那么该消息就会进入到死信队列。在实际开发中,我们可以通过实现自定义的 SeekToCurrentErrorHandler ,当 Consumer 消费消息异常的时候,进行拦截处理。例如设置重试次数,在达到最大重试次数仍然失败后保存消息到数据库后续做人工处理。SeekToCurrentErrorHandlerSeekToCurrentErrorHandle原创 2021-07-22 19:32:37 · 9174 阅读 · 3 评论