消息队列
文章平均质量分 70
消息中间件
码者人生
在高并发、高可用、大数据架构、智能运维等技术和管理领域有14年工作经验,长期关注企业信息安全、企业信息化、互联网电商等业务发展方向
展开
-
中间件-Kafka原理-生产者如何把消息写进Broker
中间件kafka已经使用好多年,一直没有时间来详细梳理其中原理,先从写入kafka开始,这里有几个概念需要理解;基础名词概念生产者:产生消息体,写入kafka;Broker:用于接收生产者和消费者请求的服务器,同时作为存储消息体的物理存储;topic:消息主题,逻辑上存储某一类消息的标记;分区:topic对应的消息写到物理磁盘时为分摊磁盘压力增加写入QPS,将消息写入不同的磁盘区域,一个消息写入磁盘的区域的个数为分区数量;消费者:消息中间件读取消息的程序;消费者组:从消息中间件读原创 2022-05-26 22:37:07 · 1026 阅读 · 0 评论 -
正常队列、重试队列、死信队列、延时队列原理及区别
消费失败问题试想如果消费者在消费时发生了异常,那么就不会对这一次消费进行确认(Ack),进而发生回滚消息的操作之后消息始终会放在队列的顶部,然后不断被处理和回滚,导致队列陷入死循环。为了解决该问题,引入回退队列。可以为每个队列设置一个回退队列。回退队列消费端消费消息失败时,为防止消息无故丢失而重新将消息回滚到Broker中,这个时候可以将消息写入回退队列。重试队列与回退队列不同的是重试队列一般分成多个重试等级,每个重试等级一般也会设置重新投递...原创 2021-09-13 16:23:06 · 1369 阅读 · 0 评论 -
Kafka-零拷贝
Kafka除了具备消息队列MQ的特性和使用场景外,它还有一个重要用途,就是做存储层。用kafka做存储层,为什么呢?一大堆可以做数据存储的 MySQL、MongoDB、HDFS……因为kafka数据是持久化磁盘的,还速度快;还可靠、支持分布式……啥!用了磁盘,还速度快!!!没错,kafka就是速度无敌,本文将探究kafka无敌性能背后的秘密。首先要有个概念,kafka高性能的背后,是多方面协同后、最终的结果,kafka从宏观架构、分布式partition存储、ISR数据同步、以及“无孔不原创 2021-09-10 17:43:31 · 1685 阅读 · 0 评论 -
Kafka-重置消费者offset到最新的位置
获取topic下所有的partion 计算每个partion的offset 将分区offset移动最新的位置 提交分区最新的位置如下代码public class KafkaConsumerOffsetManager { private KafkaConsumer consumer; private String topic; public KafkaConsumerRunnable(KafkaConsumer consumer, String topic) {原创 2021-07-22 15:12:11 · 2403 阅读 · 1 评论 -
Kafka-消息积压、消息过期、读写分离、一致性保障
1.大量消息在mq里积压了几个小时了还没解决场景:几千万条数据在MQ里积压了七八个小时,从下午4点多,积压到了晚上很晚,10点多,11点多。线上故障了,这个时候要不然就是修复consumer的问题,让他恢复消费速度,然后傻傻的等待几个小时消费完毕。这个肯定不行。一个消费者一秒是1000条,一秒3个消费者是3000条,一分钟是18万条,1000多万条。 所以如果你积压了几百万到上千万的数据,即使消费者恢复了,也需要大概1小时的时间才能恢复过来。 解决方案: 这种时候只能操作临时扩容,以更快的速度去消费数据原创 2021-07-22 14:10:22 · 7658 阅读 · 2 评论 -
Kafka工作原理-数据写入、ACK、查询、消费原理
为什么需要消息队列 周末无聊刷着手机,某宝网APP突然蹦出来一条消息“为了回馈老客户,女朋友买一送一,活动仅限今天!”。买一送一还有这种好事,那我可不能错过!忍不住立马点了去。于是选了两个最新款,下单、支付一气呵成!满足的躺在床上,想着马上有女朋友了,竟然幸福的失眠了…… 第二天正常上着班,突然接到快递小哥的电话: 小哥:“你是xx吗?你的女朋友到了,我现在在你楼下,你来拿一下吧!”。 我:“这……我在上班呢,可以晚上送过来吗?“。 小哥:“晚上可不行哦,晚上我也下班了呢!”。 于原创 2021-07-21 14:39:56 · 679 阅读 · 0 评论 -
kafka-批量发送
生产者发送多个消息到同一个分区的时候,为了减少网络带来的系能开销,kafka会对消息进行批量发送batch.size通过这个参数来设置批量提交的数据大小,默认是16k,当积压的消息达到这个值的时候就会统一发送(发往同一分区的消息)linger.ms这个设置是为发送设置一定是延迟来收集更多的消息,默认大小是0ms(就是有消息就立即发送)当这两个参数同时设置的时候,只要两个条件中满足一个就会发送。比如说batch.size设置16kb,linger.ms设置50ms,那么当消息积压达到16kb就会原创 2021-07-02 10:28:34 · 7981 阅读 · 3 评论 -
kafka-如何压缩消息
kafka是如何压缩消息的?要弄清楚这个问题,就要从kafka的消息格式说起。kafka的消息层次分为两层:消息集合(message set)以及消息(message)。一个消息集合包含若干条日志项(recorditem),而日志项才是真正封装消息的地方。kafka底层的消息日志由一系列消息集合日志项组成。kafka通常不会直接操作具体的一条条消息,它总是在消息集合这个层面上进行写入操作。在kafka中,压缩可能会发生在两个地方:生产者端和broker端。生产者程序中配置compression.t.原创 2021-06-17 22:15:02 · 1938 阅读 · 1 评论