1.kafka知识点
1.1 生产者
1.提高生产者性能,可以使用异步发送。生产者宕机会导致消息丢失,需要生成者有机制保证驱动流程到终态
2.生产者自己决定消息的重要性,配置不同的ack可以获取不一样的性能。ack为1代表主本ack即可,ack为0不需要主本ack,ack为-1要求主本和副本都ack。
1.2 消费者
- 消费者要幂等,kafka消息有可能重复
- 消费失败,需要进入死信重试
- 消费者catch所有异常,否则会导致kafka中断
- 消费者是拉模式,消费速率消费者控制,缺点是消息延迟。如果是推模式优缺点相反。RocketMQ也是拉模式。kafka和rocketMQ都采取长轮询模式规避拉模式的缺点,白话就是服务端和客户端配合,采用通知机制实现。具体参考:https://juejin.cn/post/6864909592061542407
- partition内保证有序
1.3 缺点
- kafka rebalance期间会导致消费者暂停消费,对于实时性要求非常高的服务是不可接受的。
2.由于mafka本身模型的原因,一个partition只能被一个消费者消费,当消费者数量大于partition数量时,部分消费者分配不到partition。
解决思路:增加中间层,中间层从broker拉数据,放入阻塞队列。消费者直接从阻塞队列取数据。
1.4 事务
2PC:同步阻塞,协调者单点
TCC:业务耦合大。TCC 分为三个阶段 try - confirm - cancel,try成功,confirm一定要能够成功。 try失败,cancel一定要能够成功。confirm,cancel要支持重试幂等。
事务消息:适用于异步更新的场景,并且对数据实时性要求不高的地方,解决消息生产者与消息消费者的数据一致性问题。比如下单后需要把购物车清空
rocketMQ事务原理:
![](https://img.haomeiwen.com/i6504578/89e8d09b9ffcb309.png)
RocketMQ 解决的是本地事务的执行和发消息这两个动作满足事务的约束,
而 Kafka 事务消息则是用在一次事务中需要发送多个消息的情况,保证多个消息之间的事务约束,即多条消息要么都发送成功,要么都发送失败。
参考:https://juejin.cn/post/6867040340797292558
1.5 RocketMq与kafka区别
1.topic数量激增,kafka性能下降比较厉害,rocketmq表现良好
2.事务消息,rocketmq支持,kafka不支持
3.kafka使用异步刷盘方式,异步Replication
RocketMQ支持异步刷盘,同步刷盘,同步Replication,异步Replication
- Kafka消费失败不支持重试
RocketMQ消费失败支持定时重试,每次重试间隔时间顺延 - Kafka不支持定时消息
RocketMQ支持定时消息 - Kafka理论上可以按照Offset来回溯消息
RocketMQ支持按照时间来回溯消息,精度毫秒,例如从一天之前的某时某分某秒开始重新消费消息
1.6 kafka高性能
- 批量发送消息
2.消息持久化为顺序写 -
零拷贝
image.png
网友评论