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,重试,消息
From: https://www.cnblogs.com/li-xiaotian/p/16616716.html