前言 SpringBoot中集成Kafka,主要目的干啥呢,当然消息推送啦。不同系统之间,自身系统不同组件之间消息通信的一种方式,也可以是使用MQ。 使用消息系统的目的主要就是为了解耦、异步通信、消峰处理。 消息系统三大优点 解耦 怎么理解呢,比如我是A系统,我要现在要给B、C两个系统发送消息,如果不用消息系统,直接调用,就相当于A系统跟B、C系统强耦合到一起了,如果后面还有D、E......等系统怎么办呢,我总不能挨着挨着一个一个写吧,这样代码耦合太高了,而且我还得考虑别人收到没有,处理成功失败等等情况。那我使用消息系统不就解决这个问题了嘛,我直管向Kafka推送消息,我才不管你谁来消费呢,...

一、为什么需要消息系统 1、解耦:允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。 2、冗余:消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。许多消息队列所采用的"插入-获取-删除"范式中,在把一个消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直到你使用完毕。 3、扩展性:因为消息队列解耦了你的处理过程,所以增大消息入队和处理的频率是很容易的,只要另外增加处理过程即可。 4、灵活性&峰值处理能力:在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果为以...

一、为什么分区 kafka有主题(Topic)的概念,它是承载真实数据的逻辑容器,而在主题之下还分为若干个分区,也就是说kafka的消息组织方式实际上是三级结构:主题---分区---消息。主题下的每条消息只会保存在某一个分区中,而不会在多个分区中保存多份。官网上的这张图非常清晰地展示了kafka的三级结构,如下: 其实分区的作用就是提供负载均衡的能力,或者说对数据进行分区的主要原因,就是为了实现系统的高伸缩性。不同的分区能够放置到不同节点机器上,而数据库的读写操作也都是针对分区这个粒度而进行的,这样每个节点的机器都能独立的执行各自分区的读写请求处理。并且,我们还可以通过添加新的节点记起来增加...

一、kafkareplica 1、当某个topic的replication-factor为N且N大于1时,每个Partition都会有N个副本(Replica)。kafka的replica包含leader与follower。 2、Replica的个数小于等于Broker的个数,也就是说,对于每个Partition而言,每个Broker上最多只会有一个Replica,因此可以使用Brokerid指定Partition的Replica。 3、所有Partition的Replica默认情况会均匀分布到所有Broker上。 二、DataReplication如何Propagate(扩散出去)消息?...

一、消费方式 kafka采用发布订阅模式:一对多。发布订阅模式又分两种: push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由broker决定的。它的目标是尽可能以最快速度传递消息,但是这样很容易造成consumer来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而pull模式则可以根据consumer的消费能力以适当的速率消费消息。 kafkaconsumer采用pull(拉)模式从broker中读取数据。pull模式不足之处是,如果kafka没有数据,消费者可能会陷入循环中,一直返回空数据。针对这一点,Kafka的消费者在消费数据时会传入一个时长参数timeout,如...

一、顺序写磁盘 Kafka的producer生产数据,要写入到log文件中,写的过程是一直追加到文件末端,为顺序写。官网有数据表明,同样的磁盘,顺序写能到600M/s,而随机写只有100K/s。这与磁盘的机械机构有关,顺序写之所以快,是因为其省去了大量磁头寻址的时间。   kafka的整个设计中,Partition相当于一个非常长的数组,而Broker接收到的所有消息顺序写入这个大数组中。同时Consumer通过Offset顺序消费这些数据,并且不删除已经消费的数据,从而避免了随机写磁盘的过程。   由于磁盘有限,不可能保存所有数据,实际上作为消息系统Kafka也没必要保存...

一、顺序写磁盘 Kafka的producer生产数据,要写入到log文件中,写的过程是一直追加到文件末端,为顺序写。官网有数据表明,同样的磁盘,顺序写能到600M/s,而随机写只有100K/s。这与磁盘的机械机构有关,顺序写之所以快,是因为其省去了大量磁头寻址的时间。   kafka的整个设计中,Partition相当于一个非常长的数组,而Broker接收到的所有消息顺序写入这个大数组中。同时Consumer通过Offset顺序消费这些数据,并且不删除已经消费的数据,从而避免了随机写磁盘的过程。   由于磁盘有限,不可能保存所有数据,实际上作为消息系统Kafka也没必要保存...

一、Kafka核心API 下图是官方文档中的一个图,形象的描述了能与Kafka集成的客户端类型 Kafka的五类客户端API类型如下: AdminClientAPI:允许管理和检测Topic、broker以及其他Kafka实例,与Kafka自带的脚本命令作用类似。 ProducerAPI:发布消息到1个或多个Topic,也就是生产者或者说发布方需要用到的API。 ConsumerAPI:订阅1个或多个Topic,并处理产生的消息,也就是消费者或者说订阅方需要用到的API。 StreamAPI:高效地将输入流转换到输出流,通常应用在一些流处理场景。 ConnectorAPI:从一些源系统或应用...

一、Kafka核心API 下图是官方文档中的一个图,形象的描述了能与Kafka集成的客户端类型 Kafka的五类客户端API类型如下: AdminClientAPI:允许管理和检测Topic、broker以及其他Kafka实例,与Kafka自带的脚本命令作用类似。 ProducerAPI:发布消息到1个或多个Topic,也就是生产者或者说发布方需要用到的API。 ConsumerAPI:订阅1个或多个Topic,并处理产生的消息,也就是消费者或者说订阅方需要用到的API。 StreamAPI:高效地将输入流转换到输出流,通常应用在一些流处理场景。 ConnectorAPI:从一些源系统或应用...

一、Kafka核心API 下图是官方文档中的一个图,形象的描述了能与Kafka集成的客户端类型 Kafka的五类客户端API类型如下: AdminClientAPI:允许管理和检测Topic、broker以及其他Kafka实例,与Kafka自带的脚本命令作用类似。 ProducerAPI:发布消息到1个或多个Topic,也就是生产者或者说发布方需要用到的API。 ConsumerAPI:订阅1个或多个Topic,并处理产生的消息,也就是消费者或者说订阅方需要用到的API。 StreamAPI:高效地将输入流转换到输出流,通常应用在一些流处理场景。 ConnectorAPI:从一些源系统或应用...

一、Kafka核心API 下图是官方文档中的一个图,形象的描述了能与Kafka集成的客户端类型 Kafka的五类客户端API类型如下: AdminClientAPI:允许管理和检测Topic、broker以及其他Kafka实例,与Kafka自带的脚本命令作用类似。 ProducerAPI:发布消息到1个或多个Topic,也就是生产者或者说发布方需要用到的API。 ConsumerAPI:订阅1个或多个Topic,并处理产生的消息,也就是消费者或者说订阅方需要用到的API。 StreamAPI:高效地将输入流转换到输出流,通常应用在一些流处理场景。 ConnectorAPI:从一些源系统或应用...

一、erlang下载安装 1、下载    下载erlang,原因在于RabbitMQ服务端代码是使用并发式语言erlang编写的,下载地址:http://www.erlang.org/downloads,双击.exe文件进行安装就好。 2、安装 一直next就可以,不再描述  3、配置环境变量 安装完成之后创建一个名为ERLANG_HOME的环境变量,其值指向erlang的安装目录。 同将%ERLANG_HOME%\bin加入到Path中  4、验证是否成功 最后打开命令行,输入erl,如果出现erlang的版本信息就表示erlang语...

一、RabbitMQ的特点 RabbitMQ是一款使用Erlang语言开发的,实现AMQP(高级消息队列协议)的开源消息中间件。首先要知道一些RabbitMQ的特点,官网可查: 可靠性:支持持久化,传输确认,发布确认等保证了MQ的可靠性。 灵活的分发消息策略:这应该是RabbitMQ的一大特点。在消息进入MQ前由Exchange(交换机)进行路由消息。 分发消息策略有:简单模式、工作队列模式、发布订阅模式、路由模式、通配符模式。 支持集群:多台RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker。 多种协议:RabbitMQ支持多种消息队列协议,比如STOMP、MQTT等等。...

第一部分:延迟消息的实现原理和知识点 使用RabbitMQ来实现延迟任务必须先了解RabbitMQ的两个概念:消息的TTL和死信Exchange,通过这两者的组合来实现上述需求。 消息的TTL(TimeToLive) 消息的TTL就是消息的存活时间。RabbitMQ可以对队列和消息分别设置TTL。对队列设置就是队列没有消费者连着的保留时间,也可以对每一个单独的消息做单独的设置。超过了这个时间,我们认为这个消息就死了,称之为死信。如果队列设置了,消息也设置了,那么会取小的。所以一个消息如果被路由到不同的队列中,这个消息死亡的时间有可能不一样(不同的队列设置)。这里单讲单个消息的TTL,因为它才是...

1、简介 RabbitMQ即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。 2、创建一个springboot的项目 3、添加RabbitMQ依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> 4、在application.yml中配置RabbitMQ spring: rabbitmq: ...

从AMQP协议可以看出,MessageQueue、Exchange和Binding构成了AMQP协议的核心,下面我们就围绕这三个主要组件  从应用使用的角度全面的介绍如何利用RabbitMQ构建消息队列以及使用过程中的注意事项。 1. 声明MessageQueue       在RabbitMQ中,无论是生产者发送消息还是消费者接受消息,都首先需要声明一个MessageQueue。这就存在一个问题,是生产者声明还是消费者声明呢?要解决这个问题,首先需要明确: a)消费者是无法订阅或者获取不存在的Me...

RabbitMQ简介 AMQP,即AdvancedMessageQueuingProtocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性...

消息如何保障100%的投递成功? 什么是生产端的可靠性投递? 1、保障消息的成功发出 2、保障MQ节点的成功接收 3、发送端收到MQ节点(Broker)确认应答 4、完善的消息进行补偿机制前三步不一定能保障消息能够100%投递成功,因此要加上第四步。 一线互联网大厂的解决方案:1、消息落库,对消息状态进行打标图解: 蓝色部分表示:生产者负责发送消息发送至Broker端 BizDB:订单数据库 MSGDB:消息数据 面对小规模的应用可以采用加事务的方式,保证事务的一致性。但在大厂中面对高并发,并没有加事务,事务的性能拼接非常严重,而是做补偿。比如:如下发一条订单消息。 step1:存储订单...

RabbitMQ整合SpringAMQP AMQP核心组件 RabbitAdmin SpringAMQP声明 RabbitTemplate SimpleMessageListenerContainer MessageListenerAdapter MessageConverter RabbitAdmin RabbitAdmin类可以很好的操作RabbitMQ,在Spring中直接进行注入即可。 @Configuration publicclassRabbitMQConfig{ @Bean publicConnectionFactoryconnectionFactory(){ Cachin...

RabbitMQ集群架构模式 主备模式 实现RabbitMQ的高可用集群,一般在并发和数据量不高的情况下,这种模式非常的好且简单。主备模式也称为Warren模式 主备模式:主节点提供读写,从节点不提供读写服务,只是负责提供备份服务,备份节点的主要功能是在主节点宕机时,完成自动切换从-->主,从而继续提供服务主从模式:主节点提供读写,从节点只读 主备模式:所谓rabbitmq另外一种模式就是warren(兔子窝),就是一个主/备方案(主节点如果挂了,从节点提供服务而已,和activemq利用zookeeper做主/备一样) HaProxy配置: listenrabbitmq_clu...

关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~