消息队列(Kafka、RocketMQ)

消息模型:

RocketMQ消息模型:在这里插入图片描述

Kafka:RocketMQ中的队列(queue)对应Kafka中的分区(Partition),其他两者的消息模型一致

事务消息(提交事务失败处理方案):

Kafka:抛出异常,重试
RocketMQ:通过接口反查事务状态

保证消息可靠性:

生产阶段:消息从producer端生产出来发送到broker端。采用请求确认机制,正确处理返回值或捕获异常
存储阶段:消息在broker端存储。数据写入磁盘成功再相应,如果是集群的话,节点刷盘成功数过半通过
消费阶段:消息从broker端到consumer端。采用请求确认机制,业务逻辑完成后再发送消费确认

重复消息处理:

1、利用数据库的唯一索引
2、给更新的数据设置前置条件
3、记录并检查

消息堆积处理:

1、发送变快:
	增加消费端的实例,系统降级关闭一些不重要的业务
2、消费变慢:
	排查变慢原因,消费失败导致一条消息反复消费的情况变多,消费线程是不是阻塞住了

保证消息有序性:

主题层面是没法保证消息有序性的,只有在分区(队列)上才能保证有序性
如果是全局有序性,可以配置成一个队列一个生产者一个消费者
如果是局部有序性,可以取一个key,用一致性哈希算法计算出队列编号,保证相同的key发送到同一个队列上

高性能的网络传输:

通过NIO,多路复用实现高吞吐

序列化和反序列化:

将结构化数据转换成字节流的过程就称为序列化,反过来转换称为反序列化
选择序列化需要衡量的几个因素:
	序列化后的数据最后是易于阅读的
	实现的复杂度是否足够低
	序列化和反序列化的速度越快越好
	序列化后的信息密度越大越好,也就是序列化后占用的存储空间越小越好
JSON -- Kryo -- 专用的序列化

Kafka如何实现高性能IO

1、producer发送消息的时候,kafka不会马上将消息发送出去,而是会在内存缓存起来,等合适的时机再将缓存中的消息组成一批发送给broker,
	在写入磁盘、读取消息、集群复制到副本这些操作中不会将“批消息”解开,而是作为一条“批消息”进行处理的。
2、顺序读写
3、PageCache 加速消息读写
4、ZeroCopy 零拷贝
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值