消息队列
文章平均质量分 87
章绍龙
这个作者很懒,什么都没留下…
展开
-
消息队列数据有序性
一、生产过程同一个订单的所有业务都发送到同一个patition二、消费过程一个patition只有一个消费者,保证节点数大于等于patition的数量每个消费者再维护多个queue,相同的key进入同一个queue每个queue由一个线程去处理数据来提高并发,消费完确认ack,避免系统重启时queue中的数据没有处理...原创 2020-05-15 16:45:04 · 709 阅读 · 0 评论 -
kafka注意事项
每个patition可以有多个副本,但有且仅有一个作为Leader,并且所有的读写操作都在Leader上完成,Follower不提供读操作,只做主备,当Leader宕机时,出来参与选举成为LeaderLeader与Follower为主备关系,不是主从关系Leader宕机时,Broker Controller从Follower中选取一个新的主作为Leader,选举并不是由zk完成。Bro...原创 2020-04-01 15:19:34 · 696 阅读 · 0 评论 -
kafka消费端速度慢解决方案
一、增加patition数量, 有多少个patition就会启多少个消费者线程去消费,跟消费者服务节点的数量无关,只能patition有关。二、patition一样的情况下,改为批量消费,一次拉取多条数据,max.poll.records,利用多线程去处理数据,避免单线程处理批量数据时间过长,导致超时。提交方式问题:enable.auto.commit:1、默认为true,就...原创 2019-11-08 18:15:46 · 7786 阅读 · 0 评论 -
kafka根据offset查找消息原理
kafka消息文件有两个:索引文件和数据文件索引文件和数据文件对应关系1、一个partition包含多个segment文件,每个segment文件为1G左右;2、index文件:左边为本segment文件中的顺序编号,右边为数据文件中的实际物理地址,根据消息的长度地址偏移多少。3、log文件:消息数据文件,左边为该条消息在本segment文件中的实际物理地址偏移,右边为该...原创 2019-09-17 22:17:46 · 2284 阅读 · 4 评论 -
kafka高吞吐
一、顺序读写kafka的消息是不断追加到文件中的,这个特性使kafka可以充分利用磁盘的顺序读写性能顺序读写不需要硬盘磁头的寻道时间,只需很少的扇区旋转时间,所以速度远快于随机读写二、零拷贝(从磁盘到消费端)传统流程是:1、磁盘拷贝到OS缓冲区2、再拷贝到应用程序缓存3、应用程序拷贝到socket缓冲区4、再拷贝到网卡发送零拷贝流程:1、磁盘拷贝到OS缓冲区...原创 2019-05-05 16:16:40 · 280 阅读 · 0 评论 -
基于可靠消息服务的分布式事务
基于可靠消息服务的分布式事务这种实现分布式事务的方式需要通过消息中间件来实现。假设有A和B两个系统,分别可以处理任务A和任务B。此时系统A中存在一个业务流程,需要将任务A和任务B在同一个事务中处理。下面来介绍基于消息中间件来实现这种分布式事务。 在系统A处理任务A前,首先向消息中间件发送一条消息 消息中间件收到后将该条消息持久化,但并不投递。此时下游系统B仍然不知道该...转载 2019-02-25 21:11:56 · 746 阅读 · 0 评论 -
RocketMQ实现分布式事务
源代码版本是3.2.6,还是直接跑源代码。rocketmq事务消息是发生在Producer和Broker之间,是二阶段提交。二阶段提交过程看图:第一阶段是:步骤1,2,3。第二阶段是:步骤4,5。具体说明:只有在消息发送成功,并且本地操作执行成功时,才发送提交事务消息,做事务提交。其他的情况,例如消息发送失败,直接发送回滚消息,进行回滚,或者发送消息成功,但是执行本地操作失败...转载 2019-02-25 20:45:26 · 1910 阅读 · 0 评论 -
消息队列RocketMQ
一、生产过程:1、获取路由消息,本地缓存不存在,重新获取(获取Topic发布信息:tryToFindTopicPublishInfo) 传入topic、消息字符串,根据传入的topic查询是否在本地缓存中,不在从NameSerer中获取topic并存入本地缓存:GET_ALL_TOPIC_LIST_FROM_NAMESERVER; (当topic不存在时,之前的版本可以默认自动创...原创 2019-01-11 15:55:26 · 1925 阅读 · 0 评论 -
消息队列RabbitMQ
概念:queue、exchange、routingqueue:消息存储;exchange:交换器,producer通过交换器,加上路由routing key连接到queue,一个交换器可以通过不同的routing key连接到多个queue;routing:交换器和queue直接的路由。一:TLL1、队列属性x-message-ttl:整个queue的过期时间都一样;...原创 2019-01-03 21:33:47 · 172 阅读 · 1 评论 -
消息队列kafka丢数据解决方案
ACK=0:发出消息不进行确认;ACK=1:发出消息确认Leader接受成功;ACK=-1:发出消息确认Leader和所有follower都接受成功。MQ丢数据场景主要分为以下几种情况:一、客户端未发出1、Client端宕机或程序问题导致消息为发出,就报错了;2、异步情况下,消息并非实时发出,而是积累到一定程度后发出,此时Client端出现问题导致积累的所有消息...原创 2018-12-27 20:11:06 · 1387 阅读 · 0 评论