首页 > 其他分享 >消息队列 kafka

消息队列 kafka

时间:2022-08-24 15:00:42浏览次数:65  
标签:副本 消费者 队列 分区 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,重试,消息
From: https://www.cnblogs.com/li-xiaotian/p/16616716.html

相关文章

  • kafka的producer配置参数
    主要介绍下kafka的producer配置参数,只取了其中的一部分常用的,后续的有时间,也会补充一些,更多的详细参数,可以参考《kafka官网》,参数的内容,主要是选取《apachekafka实战》书......
  • Java工具篇之Disruptor高性能队列
    简介: disruptor适用于多个线程之间的消息队列,`作用与ArrayBlockingQueue有相似之处`,但是disruptor从功能、性能都远好于ArrayBlockingQueue,当多个线程之间传递大量数据或......
  • PerfView专题 (第十篇):洞察 C# 终结队列引发的内存泄漏
    一:背景C#程序内存泄漏的诱发因素有很多,但从顶层原理上来说,就是该销毁的用户根对象没有被销毁,从而导致内存中意料之外的对象无限堆积,导致内存暴涨,最终崩溃,这其中的一个......
  • 栈(Stack)和队列(Queue)
    一 栈(Stack):一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守先进后出。  ......
  • .Net Core&RabbitMQ消息转发可靠机制
    前言生产者发送消息到了队列,队列推送数据给了消费者,这里存在一些问题需要思考下生产者如何确保消息一定投递到了队列中RabbitMQ丢失了消息(下文暂不涉及这块)队列如......
  • Kafka FAQ
    1.首先在docker上安装kafka和zookeeper,加起来要1G的imagesize,先安装1台,测试完后再加集群对比测试性能用spring-kafka的包写个测试例子privateKafkaTemplate<Str......
  • 利用webhooks在企业微信中启用群机器人发送消息
    以企业微信PC端为例,利用webhooks在企业微信中启用群机器人接收、发送消息。1.添加机器人并获取webhooks地址获得webhook地址如:https://qyapi.weixin.qq.com/cgi-bin/w......
  • 从零开始Blazor Server(13)--消息通知
    我们现在做了用户管理、角色管理、菜单管理。但是大家有没有发现,我们的菜单要变化的话必须要刷新页面才行。这个体验感觉不太好。今天我们就用全局通知组件来解决这个问题......
  • 2022-8-23 剑指offer-优先队列(堆)-每日一题-太难不写了
    剑指OfferII061.和最小的k个数对难度中等44收藏分享切换为英文接收动态反馈给定两个以升序排列的整数数组 nums1 和 nums2 , 以及一个整数 k 。定义......
  • RabbitMQ消息重复消费场景及解决方案
    消息重复消费MQ的一条消息被消费者消费了多次重复消费场景重现测试如何解决消息重复消费的问题编码解决消息重复消费测试消息重复消费什么是消息重复消费?首......