消息队列
文章平均质量分 60
RealKeyboardMan
天不生我键盘侠,键道万古长如夜。
展开
-
Kafka如何实现高性能IO
使用批量消息提升服务端处理能力生产者这端,kafka不会将生产的消息立马发出去,而是会先放在内存中缓存起来,选择合适的时机(或许到达某个时间,或许攒够一定数量)把缓存中的所有消息组成一批,一次性发给Broker。在Kafka的服务端,也就是Broker这一端,不会把一批消息还原成多条消息,再一条条处理。而是直接把一批消息当做一个批消息,发到消费端。到了消费端,消费者把批消息解开,再一条条交给业务代码处理。构建批消息和解开批消息分别在发送端和消费端的客户端完成,不仅减轻了 Broker 的压力,最重原创 2021-11-09 20:14:43 · 189 阅读 · 0 评论 -
消息队列:丢失、重复和积压
消息丢失检测消息丢失的方法可以在生产端增加一个连续递增的序号,在消费端检查序号的连续性。大多数消息队列的客户端都支持拦截器,可以在生产者发消息前的拦截器中将序号注入到消息,在消费者收到消息的拦截器中检测序号。由于RocketMQ和Kafka在Topic不保证严格有序,仅在队列或分区中有序,所以序号中要带有分区信息,每个分区单独检测消息序号连续性。如果有多个生产者,则消息序号中还需要带上生产者的的标识。可能丢消息的地方生产阶段,发消息时正确处理broker返回值或者捕获异常,就可以保证消原创 2021-10-14 16:58:40 · 770 阅读 · 0 评论 -
消息队列:事务消息
在多个系统间实现事务。消息队列中的“事务”,主要解决的是消息生产者和消息消费者的数据一致性问题。比如下单后清空购物车这个操作:要么下单成功,清理购物车成功;要么下单失败,不清理购物车。问题的关键点集中在订单系统,创建订单和发送消息这两个步骤要么都操作成功,要么都操作失败,不允许一个成功而另一个失败的情况出现。消息队列实现分布式事务RocketMQ和Kafka都支持事务消息。首先订单系统开启事务,然后发送半消息,在提交之前,半消息对于消费者是不可见的。半消息发送成功后,执行本地事务。本.原创 2021-10-09 16:48:33 · 1080 阅读 · 0 评论 -
消息队列:业务模型
队列模型先进先出。如果需要将消息发给多个消费者,要求每个消费者都能收到全量消息。则需要未每个消费者单独创建队列,这种做法很蠢,且违背了消息队列解耦的原则。发布订阅模型发布者将消息发送到主题,订阅者在接收消息前需要订阅主题。订阅在这里既是一个动作,同时还可以认为是主题在消费时的一个逻辑副本,每份订阅中,订阅者都可以接收到主题的所有消息。Rabbit的消息模型Exchange模块位于生产者和队列之间,生产者将消息发给Exchange,由Exchange上配置的策略来决定将消息投递到哪些队原创 2021-10-09 16:27:09 · 106 阅读 · 0 评论 -
消息队列:RabbitMQ、RocketMQ和Kafka
三个作用:解耦、异步化、削峰填谷异步化的好处:更快返回结果、减少等待,自然实现了步骤间的并发,提升系统总体性能。解耦说明:生产者不用再一个个通知消费者,而是将消息写入一个主题就行了。以后再增加消费者,生产者也不需要关心。消息队列可以配合令牌桶算法使用,达到控制流量的目的。选择消息队列产品的基本标准必须开源、必须是比较流行且有一定社区活跃度。必须具备以下几个特性:消息的可靠性:确保不丢消息。Cluster:支持集群,确保不会因为某个节点宕机而导致服务不可用性能:具备足够好的性能,能满足.原创 2021-10-08 15:18:10 · 113 阅读 · 0 评论