
MQ
文章平均质量分 90
学习mq
五敷有你
稳中求进,多平安
展开
-
springboot使用kafka事务
如上:消费者没打印消息,说明消息没发送成功,并且前面会报错org.apache.kafka.common.KafkaException: Failing batch since transaction was aborted 的错误,说明事务生效了。kafka事务属性是指一系列的生产者生产消息和消费者提交偏移量的操作在一个事务,或者说是是一个原子操作),同时成功或者失败。配置开启事务后,使用大体有两种方式,先记录下第一种使用事务方式:使用 executeInTransaction 方法。原创 2024-06-11 18:30:09 · 883 阅读 · 62 评论 -
kafka如何保证消息不丢失
Kafka发送消息是异步发送的,所以我们不知道消息是否发送成功,所以会可能造成消息丢失。而且Kafka架构是由生产者-服务器端-消费者三种组成部分构成的。要保证消息不丢失,那么主要有三种解决方法。原创 2024-06-09 20:15:54 · 5896 阅读 · 57 评论 -
kafka生产消费流程
1.生产者先从zookeeper的"/brokers/topic/主题名/partitions/分区名/state"节点找到该partition的leader。比如,消费者可以重置到旧的偏移量,重新处理之前已经消费过的消息;或者直接跳到最近的位置,从当前的时刻开始消费。kafka采用拉取模型,由消费者自己记录消费状态,每个消费者相互独立的顺序拉取消息。leader接收到所有的ISR中的Replica的ACK中,并向生产者返回ACK。broker进程上的leader将消息写入到本地log中。原创 2024-06-09 19:59:57 · 1587 阅读 · 2 评论 -
kafka的leader和follower
在Linux中强制杀掉该Kafka的进程,然后观察leader的情况。kafka的leader负责读写,follower不能读写数据(确保每个消费者消费的数据是一致的),kafka一个topic有多个分区leader,一样可以实现负载均衡。如果kafka是居于ZK进行选举,ZK的压力比较大,例如某个节点崩溃,这个节点上不仅仅只有一个leader,是有不少的leader需要选举,通过ISR可以快速选举。kafka会再创建topic的时候尽量让分配分区的leader在不同的broker中,就是负载均衡。原创 2024-06-08 20:45:41 · 2102 阅读 · 22 评论 -
kafka的副本机制
副本的目的就是冗余备份,当某个Broker上的分区数据丢失时,依然可以保障数据可用。因为在其他的Broker上的副本是可用的。原创 2024-06-07 17:17:44 · 554 阅读 · 4 评论 -
Kafka的分区副本机制
1.自定义分区器@Override@Override// cluster.partitionCountForTopic 表示获取指定topic的分区数量@Override2.在kafka生产者配置中,自定义使用自定义分区器的类名。原创 2024-06-07 17:02:00 · 2611 阅读 · 36 评论 -
Kafka入门
消息队列——用于存放消息的组件程序员可以将消息放入到队列中,也可以从消息队列中获取消息很多时候消息队列不是一个永久性的存储,是作为临时存储存在的(设定一个期限:设置消息在MQ中保存10天)消息队列中间件:消息队列的组件,例如:Kafka、Active MQ、RabbitMQ、RocketMQ、ZeroMQ。原创 2024-06-04 19:57:05 · 684 阅读 · 1 评论 -
Kafka进阶(一)
Kafka生产者生产消息到partition,如果直接发送消息,kafka会将消息保存到分区中,但Kafka会返回一个ack给生产者,表示当前操作是否成功,是否已经保存了这条消息。如果ack响应的过程失败了,此时生产者会重试,继续发送没有发送成功的消息,Kafka又会保存一条一模一样的消息。当Kafka的生产者生产消息时,会增加一个pid(生产者的唯一编号)和sequence number(针对消息的一个递增序列)一个topic中如果只有一个分区,那么这个分区只能被某个组中的一个消费者消费。原创 2024-06-04 20:06:09 · 995 阅读 · 35 评论 -
零拷贝(Zero Copy)
零拷贝技术指的是在计算机执行操作时,CPU不需要先将数据从一个内存区域复制到另一个内存区域,从而可以减少上下文以及CPU的拷贝时间。他的作用是在数据报从网络设备到用户程序空间传递的过程,减少数据拷贝的次数,减少系统调用,实现CPU的零参与,彻底消除CPU在这方面的负载,实现零拷贝的最主要的技术就是DMA数据传输技术和内存区域映射技术。零拷贝就是可以减少数据在用户缓冲区和内核缓冲区之间的反复的I/O拷贝操作。零拷贝机制可以减少用户进程地址空间和内核地址空间之间因为上下文切换带来的CPU开销。原创 2024-05-28 15:43:46 · 5400 阅读 · 46 评论 -
MQ如何保证可靠性
数据持久化和消费者的可靠性原创 2024-05-06 19:51:01 · 2001 阅读 · 19 评论 -
MQ的消息如何保证可靠性
每个只能配置一个,因此我们可以在配置类中统一设置。@Slf4j@Overridelog.error("触发return callback,");});由于每个消息发送时的处理逻辑不一定相同,因此ConfirmCallback需要在每次发消息时定义。具体来说,是在调用RabbitTemplate中的convertAndSend方法时,多传递一个参数:id:消息的唯一标示,MQ对不同的消息的回执以此做判断,避免混淆:回执结果的Future对象将来MQ的回执就会通过这个。原创 2024-05-06 16:51:00 · 1130 阅读 · 66 评论 -
【MQ】声明队列和交换机绑定
但是在实际开发时,队列和交换机是程序员定义的,将来项目上线,又要交给运维去创建。而在数据传输时,它会把你发送的消息序列化为字节发送给MQ,接收消息的时候,还会把字节反序列化为Java对象。此时,我们到MQ控制台删除object.queue中的旧的消息。我们希望消息体的体积更小、可读性更高,因此可以使用JSON方式来做序列化和反序列化。@Bean 声明Bean,返回值是Bean的类型,方法名是Bean的id。注意,这里我们先不要给这个队列添加消费者,我们要查看消息体的格式。利用@Bean的方式创建一个队列,原创 2024-03-11 18:49:20 · 1233 阅读 · 2 评论 -
【RabbitMQ】RabbitMQ的交换机
交换机的作用是什么?接收publisher发送的消息将消息按照规则路由到与之绑定的队列不能缓存消息,路由失败,消息丢失FanoutExchange的会将消息路由到每个绑定的队列描述下Direct交换机与Fanout交换机的差异?Fanout交换机将消息路由给每一个与之绑定的队列Direct交换机根据RoutingKey判断路由给哪个队列如果多个队列具有相同的RoutingKey,则与Fanout功能类似Topic交换机描述下Direct交换机与Topic交换机的差异?原创 2024-03-09 18:46:39 · 3176 阅读 · 11 评论 -
【MQ】消息队列概述
消息队列:一般我们简称为MQ(Message Queue)Message Queue :消息队列中间件,很多初学者认为,MQ通过消息的发送和接受来实现程序的异步和解耦。mq主要用于异步操作,这个并不是mq的真正目的,这只是mq的应用,mq的真正目的是为了通讯。原创 2024-03-08 10:44:09 · 1711 阅读 · 19 评论 -
【RabbitMQ】WorkQueue
多个消费者绑定到一个队列,同一条消息只会被一个消费者处理通过设置prefetch来控制消费者预取的消息数量。原创 2024-03-07 22:06:48 · 1712 阅读 · 15 评论