消息队列
各种各样的消息队列
新手路上的程序员
这个作者很懒,什么都没留下…
展开
-
kafka 笔记十 kafka 延时队列
延时队列两个follower副本都已经拉取到了leader副本的最新位置,此时又向leader副本发送拉取请求,而leader副本并没有新的消息写入,那么此时leader副本该如何处理呢?可以直接返回空的拉取结果给follower副本,不过在leader副本一直没有新消息写入的情况下,follower副本会一直发送拉取请求,并且总收到空的拉取结果,消耗资源。 Kafka在处理拉取请求时,会先读取一次日志文件,如果收集不到足够多(fetchMinBytes,由参数fetch.min.bytes配置,原创 2020-08-26 18:32:16 · 6120 阅读 · 0 评论 -
kafka 笔记九 kafka 消息重复
消息重复的场景及解决方案 消息重复和丢失是kafka中很常见的问题,主要发生在以下三个阶段: 1. 生产者阶段 2. broke阶段 3. 消费者阶段1 生产者阶段重复场景生产发送的消息没有收到正确的broke响应,导致生产者重试。生产者发出一条消息,broke落盘以后因为网络等种种原因发送端得到一个发送失败的响应或者网络中断,然后生产者收到一个可恢复的Exception重试消息导致消息重复。 说明:1. new KafkaProducer()后创建一个后台线程KafkaThre原创 2020-08-26 17:32:34 · 1305 阅读 · 0 评论 -
kafka 笔记八 kafka 稳定性
1 事务 一、事务场景1. 如producer发的多条消息组成一个事务这些消息需要对consumer同时可见或者同时不可见 。2. producer可能会给多个topic,多个partition发消息,这些消息也需要能放在一个事务里面,这就形成了一个典型的分布式事务。 3. kafka的应用场景经常是应用先消费一个topic,然后做处理再发到另一个topic,这个consume-transform-produce过程需要放到一个事务里面,比如在消息处理或者发送的过程中如果失败了,消费偏移量.原创 2020-08-26 16:06:47 · 473 阅读 · 0 评论 -
kafka 笔记七 kafka磁盘存储
1 零拷贝kafka高性能,是多方面协同的结果,包括宏观架构、分布式partition存储、ISR数据同步、以及“无所不用其极”的高效利用磁盘/操作系统特性。零拷贝并不是不需要拷贝,而是减少不必要的拷贝次数。通常是说在IO读写过程中。 传统IO 比如:读取文件,socket发送 传统方式实现:先读取、再发送,实际经过1~4四次copy。1、第一次:将磁盘文件,读取到操作系统内核缓冲区; 2、第二次:将内核缓冲区的数据,copy到application应用程序的buffer; 3、原创 2020-08-26 14:46:04 · 1382 阅读 · 0 评论 -
kafka 笔记六 kafka物理存储
一日志存储概述 LogSegment1. 分区日志文件中包含很多的 LogSegment 2. Kafka 日志追加是顺序写入的 3. LogSegment 可以减小日志文件的大小 4. 进行日志删除的时候和数据查找的时候可以快速定位。 5. ActiveLogSegment 是活跃的日志分段,拥有文件拥有写入权限,其余的 LogSegment 只有只读的权限。日志文件存在多种后缀文件,重点需要关注 .index、.timestamp、.log 三种类型。 每个 LogSeg.原创 2020-08-26 14:25:16 · 230 阅读 · 0 评论 -
kafka 笔记五 kafka消费者 分区副本
分区副本的分配副本分配的三个目标:1. 均衡地将副本分散于各个broker上 2. 对于某个broker上分配的分区,它的其他副本在其他broker上 3. 如果所有的broker都有机架信息,尽量将分区的各个副本分配到不同机架上的broker。 在不考虑机架信息的情况下: 1. 第一个副本分区通过轮询的方式挑选一个broker,进行分配。该轮询从broker列表的随机位置进行轮询。 2. 其余副本通过增加偏移进行分配分配案例:broker-0 broker-1 broker原创 2020-08-26 11:24:29 · 378 阅读 · 0 评论 -
kafka 笔记四 kafka消费者 再均衡
1 什么是再均衡? 再均衡(Rebalance)本质上是一种协议,规定了一个消费组中所有消费者如何达成一致来分配订阅主题的每个分区。 比如某个消费组有20个消费组,订阅了一个具有100个分区的主题。正常情况下,Kafka平均会为每个消费者分配5个分区。这个分配的过程就叫再均衡。 2 什么时候再均衡? 再均衡的触发条件: 1. 组成员发生变更(新消费者加入消费组组、已有消费者主动离开或崩溃了) 2. 订阅主题数发生变更。如果正则表达式进行订阅,则新建匹配正则表达式的主题触发再均.原创 2020-08-26 10:38:16 · 1320 阅读 · 0 评论 -
kafka 笔记三 kafka消费者 心跳
消费者心跳机制Kafka 的心跳是 Kafka Consumer 和 Broker 之间的健康检查,只有当 Broker Coordinator 正常时,Consumer 才会发送心跳。 Consumer 和 Rebalance 相关的 2 个配置参数:broker 端,sessionTimeoutMs 参数broker 处理心跳的逻辑在 GroupCoordinator 类中:如果心跳超期, broker coordinator 会把消费者从 group 中移除,并触发 rebalance原创 2020-08-26 09:57:34 · 2338 阅读 · 0 评论 -
kafka 笔记二 kafka生产者
Kafka数据生产流程解析1. Producer创建时,会创建一个Sender线程并设置为守护线程。2. 生产消息时,内部其实是异步流程;生产的消息先经过拦截器->序列化器->分区器,然后将消息缓存在缓冲区(该缓冲区也是在Producer创建时创建)。3. 批次发送的条件为:缓冲区数据大小达到batch.size或者linger.ms达到上限,哪个先达到就算哪个。4. 批次发送后,发往指定分区,然后落盘到broker;如果生产者配置了retrires参数大于0并且失败原因允许重试,那么原创 2020-08-25 15:53:18 · 151 阅读 · 0 评论 -
kafka 笔记一 基本概念
重新学习kakfa,实在是kafka太过重要。1.kafka中的partition和Replicaspartition指本topic有多少个分区,Replicas是指每个partition有多少数据备份,这里如果Replicas=3,那么多余每个partition则有1个leader和两个follower。2.kafka中最普通的leader和followerfollower相比le...原创 2019-07-22 10:07:54 · 204 阅读 · 0 评论 -
Kafka 四 请求过程
元数据请求:因为kafka所有的请求都必须经过分区首领,但是分区首领(因为建立了分区副本)是分布在不同的broker上面的,所以生产者在发送消息之前必须获取分区的元数据信息。这就是元数据请求。这种请求包含了客户端感兴趣的主题列表。服务器端的响应消息里指明了这些主题所包含的分区、每个分区都有哪些副本, 以及哪个副本是首领。元数据请求可以发送给任意一个 broker ,因为所有 broker 都缓...原创 2018-06-26 11:06:14 · 424 阅读 · 0 评论 -
Kafka 三 配置信息
kafka 生产者的一些配置:acks:acks 参数指定了必须要有多少个分区副本收到消息,生产者才会认为消息写入是成功的。这个参数对消息丢失的可能性有重要影响。主参数有如下选项。如果 acks=0 生产者在成功写入消息之前不会等待任何来自服务器的响应。也就是说,如果当中出现了问题,导致服务器没有收到消息,那么生产者就无从得知,消息也就丢失了。不过,因为生产者不需要等待服务器的响应,所以它...原创 2018-06-23 20:38:55 · 313 阅读 · 0 评论 -
RabbitMQ 第一篇
其实这一篇博客是准备接着上一篇博客去讲述一些ActiveMQ的一些原理的,突然发现自己的积累还是不够,不知道从何处开始讲解原理,也怕有些知识理解错误,耽误大家,原理方面的博客可能需要一段时间的沉淀,在工作中实际的用到,到时候在来补上这个缺口,所以将RabbitMQ的一些整合贴出来,给大家借鉴一些,有问题欢迎指出RabbitMQ的作用和我上篇所讲ActiveMQ的作用差不多。RabbiMQ是基于原创 2017-12-14 14:11:11 · 227 阅读 · 0 评论 -
RabbitMq 第二篇
上一篇用最原始的的方法写了一下rabbitmq的direct模式 这一篇 用spring的方式将rabbitmq 的三种模式都讲一下首先是maven依赖 org.springframework.amqp spring-rabbit 1.4.0.RELEASE com.rabbitmq amqp-client 4.1.0原创 2018-01-12 15:12:27 · 173 阅读 · 0 评论 -
RabbitMQ 第三篇
这一篇的主要是rabbitmq和springboot的整合导入的依赖: org.springframework.boot spring-boot-starter-amqp配置:spring.application.name=springboot-rabbitmqspring.rabbitmq.host=127.0.0.1spring.rabbit原创 2018-01-12 16:37:15 · 275 阅读 · 0 评论 -
RabbitMQ 第四篇
经过前三篇博客的轰炸,看了运行结果应该对rabbitmq的三种模式有了一定的了解,这一篇比较短,就稍微说一下direct模式:通俗一点就是点对点模式,生产者将消息发送到唯一的一个队列中topic:这个模式是通过exchange和routing来判断应该发送到那个队列fanout:生产者将消息发送到exchange下面的所有队列通过上面的描述,消费者却不见了,这就是rabbitmq和原创 2018-01-12 16:58:26 · 180 阅读 · 0 评论 -
kafka 一 kafka和springboot的整合
最常用的MQ 前面两个都已经说了,这算是最后一个了依旧是直接上代码。这次是直接用的kafka和springboot的整合。最基本的没整出来了,spring的有时间在做一下。pom.xml文件<dependency> <groupId>org.springframework.kafka</groupId> <artifac...原创 2018-01-23 16:04:16 · 203 阅读 · 0 评论 -
RabbitMQ 随笔配置
原创 2018-02-11 11:35:16 · 176 阅读 · 2 评论 -
Kafka 二 kafka的瓶颈
这一章主要是说一下,kafka的瓶颈。1.磁盘的吞吐量生产者客户端的性能直接受到服务器端磁盘吞吐量的影响。生产者生成的消息必须被提交到服务器保存,大多数客户端在发送消息之后会一直等待,直到至少有一个服务器确认悄息已经成功提交为止。也就是说,磁盘写入速度越快,生成消息的延迟就越低。2.磁盘的容量磁盘容量是另一个值得讨论的话题。需要多大的磁盘容量取决于需要保留的消息数量。如果服务器每天...原创 2018-06-23 18:32:24 · 2624 阅读 · 1 评论 -
整合ActiveMQ
简单介绍一下ActiveMQ 自己的看法 有这方面的需求的还是去看看官方解释或者别的博客ActiveMQ是基于JMS的一个消息队列,也是纯java编写的。基本所有的消息中间件都是为了异步和将不重要的业务从自己的本来的业务中解耦。消息中间件都有生产者和消费者,双方都可以是多个,基于队列传输消息。如何安装开始我就不多介绍了,直接开始代码从最基本的原生开始:这个只有队列模式 没有发布订阅模原创 2017-12-14 11:43:36 · 256 阅读 · 0 评论