ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

消息队列 kafka

2022-08-24 15:00:49  阅读:163  来源: 互联网

标签:副本 消费者 队列 分区 kafka 重试 消息


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,或者业务主键来保障,不会重复消费某一条消息。

标签:副本,消费者,队列,分区,kafka,重试,消息
来源: https://www.cnblogs.com/li-xiaotian/p/16616716.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有