消息队列 kafka

本文详细介绍了Kafka作为消息队列的角色,包括概念解析,水平扩展能力,如何实现削峰填谷,异步处理,系统解耦,顺序一致性保证,消息重试机制,确保消息可靠性以及消息幂等性的设计。通过这些内容,读者将全面了解Kafka在分布式系统中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

##Kafka

概念解释

topic:队列
producer:生产者,指发送消息端
consumer:消费者,消息消费端
consumer group:消费者组,消息会发给每个消费者组,每个消费者对应一个消费者组
border:kafka服务器
partition:分区
replication-factor:副本
ar:分区中的所有副本统称为AR
isr:所有与leader副本保持一定程度同步的副本
osr:与leader副本同步滞后过多的副本
leo:标识当前日志文件中下一条待写入消息的offset
offset:分区消息偏移量
hw:高水位,木桶效应,如此leader副本的LEO为5,follower1的LEO为5,follower2的LEO为4,那么当前分区的HW取最小值4

水平扩展

分组+分区+消费者扩容 (最好不要在生产环境涉及重分配分区,分区可以多一点例如40,这个值需要测试哈
然后8个消费者,就是每个消费者5个分区,消费者增加就会重新分配分区给新的消费者,如果增加分区,那可就麻烦了
涉及数据复制等等)

消息队列-削峰

场景:秒杀请求,亿通行刷码,短信服务等
意义:将一瞬间大量的请求进行比较平缓的处理,用消息中间件来接收,然后再异步去处理。

消息队列-异步

异步就很好理解了,比如说下单成功之后要发送给用户消息一条,等等场景,注意时效性(通俗理解就是段时间内有用 这个就有可能是优先队列了)即可。

消息队列-解耦

解耦场景,合同生效时需要下发给下游如物业系统,订单系统,财务系统等等,如采用同步耦合很高,这时只需要将消息给到消息队列即可,
完成系统间解耦,但增加了系统复杂性,任何东西都是相对的,来源于相对论。

消息队列-顺序一致性

某些业务场景,需要保证消息的顺序。
kafka只能保证分区的顺序性。还要结合业务来看,比如说可以从哪个维度来保证一致性也可以,一个分区吞吐量过低。

消息队列-重试

重试分为两种情况,重试后可以成功消费消息,重试后不可消费消息,如果是顺序性消息重试是吧跳过有可能导致数据不一致更为复杂。
解决方案:失败后发布到另外一个topic-a去重试,重试错误后再发送到另外一个topic-b在失败再返回给topic-a.
看似是解决了,但是有些消息一直不可消费成功,这时可以在消息中加一个字段重试次数,重试5次之后报送到问题单,人工介入处理。
比较谁的系统没有问题呢,这条消息可能你没有考虑到这种情况。

消息队列-消息可靠性

acks参数来保证
0:意味着producer不等待broker同步完成的确认,继续发送下一条(批)信息
1:意味着producer要等待leader成功收到数据并得到确认,才继续发送下一条(批)信息
all/-1:意味着producer得到follwer确认,才继续发送下一条(批)信息

可靠性增加-性能降低,一般设置1,如果涉及到事务消息会先存数据库,以此来保证消息肯定不会丢失,这种消息就是重要消息。

消息队列-消息幂等性

重复消费问题,一般是有msgId,或者业务主键来保障,不会重复消费某一条消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值