消息中间件
文章平均质量分 70
红丶
Stay hungry, stay foolish.
展开
-
不是吧,生产环境下RocketMq还在用默认参数?
生产环境下的架构大家对RocketMq一定不陌生吗?作为阿里开源的久经考验的消息中间件,最近几年也是越来越火热,相信很多公司在消息中间件的选型上都会选择它吧。RocketMQ的消息时延小,吞吐量很高,单机可以达到10万QPS以上,而且可以保证高可用性,性能很高,而且支持通过配置保证数据绝对不丢失,可以部署大规模的集群,还支持各种高级的功能,比如说延迟消息、事务消息、消息回溯、死信队列、消息积压,等等。而且RocketMQ是基于Java开发的,符合国内大多数公司的技术栈,很容易就可以阅读他的源码,甚至是原创 2021-02-12 10:30:08 · 1057 阅读 · 1 评论 -
Springboot 整合Kafka, 如何实现手动提交offset
前言大名鼎鼎的消息中间件Kafka大家一定不陌生吧,使用消息中间件的时候最怕的就是消息丢失了,如何解决这个问题呢?或许大家都知道,消费者端手动提交offset嘛。那么具体代码该怎么写呢?本文就基于springboot来进行消费者手动提交offset的试验。配置application.ymlspring: kafka: # 指定 kafka 地址可以多个 bootstrap-servers: - 192.168.130.128:9092 - 192.168.原创 2021-01-20 19:33:41 · 4989 阅读 · 3 评论 -
瞧瞧Kafka是如何应对百万连接的
最简单的连接,短连接短连接(short connnection)是相对于长连接而言的概念,指的是在数据传送过程中,只在需要发送数据时,才去建立一个连接,数据发送完成后,则断开此连接。也就是说,如果一个连接建立之后,然后发送请求,接着就断开,那这个连接维持的时间是很短的,这个就是所谓的短连接。长连接但是短连接有一个很明显的问题,那就是每次发送请求,都必须要建立一个连接,然后再断开连接。我们都知道,网络连接的建立是一个比较耗费资源的过程。那么是不是可以建立好一个连接,然后不停的发送请求过来,系统再原创 2020-12-26 18:10:06 · 1778 阅读 · 0 评论 -
Kafka 优秀的网络通信的机制
消息生产者与Kafka的交互kafka作为消息中间件,势必会有客户端作为生产者向他发送消息,并且由于他本身是支持分布式的消息存储的,客户端在发送消息到Kafka Broker的时候,会把所有的消息分发到多个 Kafka Broker(partition)上去。此时就会默认情况下走一个负载均衡的策略,举个例子,假设有三个partition ,发送3万条消息,就会给每个Partition分发1万条消息,这样订单数据均匀分散在了3台Broker机器上。频繁网络通信问题好了,现在问题来了,客户端在发送消息原创 2020-12-25 18:12:35 · 412 阅读 · 1 评论 -
Kafka如何保证消息的顺序性
kafka的Consumer均衡算法在说顺序性这个问题之前,我们要先搞明白的是消费者是怎么消费分区上的数据。我们这里不详细讨论该算法,这不是本文的重点。简单的说:kafka的消费组的组员最多增加到和partition数量一致,超过的组员只会占用资源,而不起作用;kafka的partition的个数一定要大于消费组组员的个数,并且partition的个数对于消费组组员取模一定要为0,不然有些消费者会占用资源却不起作用;我们一般将消费组里组员的个数设置为和partition的数量相同原创 2020-12-19 19:25:36 · 4756 阅读 · 3 评论 -
Kafka如何保证消息的可靠性?
Kafka分布式,高可用存储架构总所周知,Kafka是一个分布式的、可分区的、可复制的消息系统。也就是说一个topic中的消息是放在多个partition上的,可是当一台机器宕机后不就会导致部分消息不可消费吗?所以Kafka还做了多副本冗余,每个Partition都可以搞一个副本放在别的机器上,这样某台机器宕机,只不过是Partition其中一个副本丢失。如果某个Partition有多副本的话,Kafka会选举其中一个Parititon副本作为Leader,然后其他的Partition副本是Follo原创 2020-12-18 15:29:02 · 2270 阅读 · 3 评论 -
Kafka 如何高效地发送消息
看了上一篇文章的同学,肯定都知道了Kafka是如何高效地写入消息的,那么问题来了,它又是如何高效地发送消息给消费者的呢?答案是零拷贝技术。零拷贝技术没错,熟悉java的同学应该都知道Netty也是采用了零拷贝技术吧,Kafka和它是类似的。零拷贝,从字面意思理解就是数据不需要来回的拷贝,大大提升了系统的性能。那么什么是不需要的拷贝呢?如果Kafka很简单的从磁盘读数据发送给下游的消费者,那么大概过程如下:先看看要读的数据在不在os cache(操作系统缓存)里,如果不在的话就从磁盘文件里原创 2020-12-18 13:05:09 · 303 阅读 · 0 评论 -
Kafka 如何实现每秒几十万消息的写入?
总所周知,Kafka是高吞吐低延迟的高并发、高性能的分布式消息中间件,它还具有横向扩展,容错等优点,主要用于处理活跃的流式数据,在大数据领域有极为广泛的运用。配置良好的Kafka集群甚至可以做到每秒几十万、上百万的超高并发写入。Kafka为什么这么快?大家都知道Kafka会把收到的消息都写入到硬盘中。那么问题来了?写磁盘速度难道会快吗?这是作弊啊?没错,Kafka就是作弊了。。。。为了优化写入速度Kafak采用了两个技术,顺序写入和MMAP。顺序写磁盘也就是说,Kafka仅仅将数据追加到文件的末尾原创 2020-12-18 12:06:50 · 664 阅读 · 0 评论 -
springboot rocketmq 发送顺序消息
顺序消息在某些业务中,consumer在消费消息时,是需要按照生产者发送消息的顺序进行消费的,比如订单消息,会有创建订单、订单支付、已发货,如果消息的顺序发生改变,那么这样的消息就没有意义了。RocketMQ顺序消息的实现机制在MQ的模型中,顺序需要由3个阶段去保障:消息被发送时保持顺序消息被存储时保持和发送的顺序一致消息被消费时保持和存储的顺序一致Producer端确保消息顺序唯一要做的事情就是将消息路由到特定的分区。Consumer端中需要保证调用MessageListe原创 2020-10-29 23:36:39 · 1007 阅读 · 0 评论 -
搭建RocketMQ的集群
集群模式在RocketMQ中,集群的部署模式是比较多的,有以下几种:单个Master这种方式风险较大,一旦Broker重启或者宕机时,会导致整个服务不可用,不建议线上环境使用。多Master模式一个集群无Slave,全是Master,例如2个Master或者3个Master单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到影响。多Master多Slave模式,异步复制每个Master配置一个Slave,有多对Master-Slave,HA原创 2020-10-29 21:50:56 · 184 阅读 · 0 评论 -
docker 安装rocketmq
RocketMQ简介Apache RocketMQ是一个采用Java语言开发的分布式的消息系统,由阿里巴巴团队开发,与2016年底贡献给 Apache,成为了Apache的一个顶级项目。 在阿里内部,RocketMQ 很好地服务了 集 团大大小小上千个应用,在每年的双十一当天,更有不可思议的万亿级 消息通过 RocketMQ 流转(在 2017 年的双十一当天,整个阿里巴巴集团通过 RocketMQ 流转的线上消息达到了 万亿级,峰值 TPS 达到 5600 万),在阿里大中台策略上发挥着举足轻重的作用原创 2020-10-29 21:26:49 · 242 阅读 · 1 评论 -
springboot 整合 rocketmq 发送事务消息
原理Half(Prepare) Message指的是暂不能投递的消息,发送方已经将消息成功发送到了 MQ 服务端,但是服务端未收到生产者对该消息的二次 确认,此时该消息被标记成“暂不能投递”状态,处于该种状态下的消息即半消息。Message Status Check由于网络闪断、生产者应用重启等原因,导致某条事务消息的二次确认丢失,MQ 服务端通过扫描发现某条消息长 期处于“半消息”时,需要主动向消息生产者询问该消息的最终状态(Commit 或是 Rollback),该过程即消息回查。执行原创 2020-10-29 16:18:42 · 2386 阅读 · 2 评论 -
kafka迁移和扩容
概述将服务器添加到Kafka集群很容易,只需为其分配唯一的代理ID,然后在新服务器上启动Kafka。但是,不会为这些新服务器自动分配任何数据分区,因此,除非将分区移至它们,否则在创建新主题之前它们将不会做任何工作。因此,通常在将计算机添加到群集时,您将需要将一些现有数据迁移到这些计算机。数据迁移过程是手动启动的,但完全自动化。在幕后,Kafka会将新服务器添加为要迁移的分区的跟随者,并允许其完全复制该分区中的现有数据。新服务器完全复制该分区的内容并加入同步副本后,现有副本之一将删除其分区的数据。分区重原创 2020-09-30 11:46:12 · 1233 阅读 · 0 评论 -
搭建kafka集群并使用springboot 整合
上一篇文章我们已经成功安装了kafka,本文讲解部署kafka集群,并使用springboot整合测试。设置多 broker 集群由于只有一台虚拟机,于是通过多个配置文件模拟多台broker首先为每个broker创建一个配置文件:cp config/server.properties config/server-1.propertiecp config/server.properties config/server-2.properties现在编辑这些新建的文件,设置以下属性config/s原创 2020-09-29 19:42:16 · 292 阅读 · 0 评论 -
centos7 安装kafka2.12
Kafka概述Kafka是一个分布式系统,由通过高性能TCP网络协议进行通信的服务器和客户端组成。它可以部署在内部以及云环境中的裸机硬件,虚拟机和容器上。1)Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。2)Kafka最初是由LinkedIn公司开发,并于2011年初开源。2012年10月从 Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。3)Kafka 是一个分布式消息队列。原创 2020-09-29 16:27:55 · 328 阅读 · 0 评论 -
springboot 整合rocketmq
centos7安装rocketmq在rocketmq官网下载压缩包官网地址:https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip下载到本地后上传至centos7,我的上传路径为/usr/rocektmq,然后解压unzip rocketmq-all-4.7.1-bin-release.zip 解压后进入目录cd rocketmq-all-4.7.1-bin-r原创 2020-09-27 22:07:39 · 714 阅读 · 0 评论 -
springboot rabbitMQ 消息确认
本文基于上一篇博文springboot rabbitMQ 死信队列进行改动消息发送确认发送的消息怎么样才算失败或成功?如何确认?RabbitTemplate.ReturnCallback通过实现 ReturnCallback 接口,当消息路由不到队列时触发该回调。RabbitTemplate.ConfirmCallback通过实现 ConfirmCallback 接口,消息发送到 Broker 后触发回调,确认消息是否到达 Broker 服务器,即确认是否正确到达 Exchange 中。代码示原创 2020-09-26 23:16:04 · 203 阅读 · 0 评论 -
springboot rabbitMQ 死信队列
死信队列是什么?死信队列实际上就是,当我们的业务队列处理失败(比如抛异常并且达到了retry的上限),就会将消息重新投递到另一个Exchange(Dead Letter Exchanges),该Exchange再根据routingKey重定向到另一个队列,在这个队列重新处理该消息。本文通过springboot 集成rabbitMQ,配置一个正常队列和一个死信队列,正常队列设置了消息最长存活时间,当队列中的消息超过存活时间且还没有被消费时,该消息就会存入死信队列。生产者pom.xml<?xml原创 2020-09-26 17:08:30 · 759 阅读 · 0 评论 -
RabbitMQ 传送对象
springboot集成RabbitMQ后能通过RabbitTemplate很方便的传送对象。代码示例 :发送方Student student=new Student();rabbitTemplate.convertAndSend("exchange_name","key_name",student);接收方: @RabbitHandler public void process(@Payload Student student){ System.out.println原创 2020-09-26 00:22:12 · 3601 阅读 · 0 评论 -
springboot 配置RabbitMQ 重试机制
springboot集成rabbitMQ中可以直接在配置文件中启用重试机制,被配置重试相关参数,当消费者在处理消息时如果发生异常则该条消息不会被移出消息队列。只有当正常处理后才会将消息移除队列。生产者导入依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSche原创 2020-09-26 00:07:22 · 2399 阅读 · 3 评论 -
Springboot 整合RabbitMQ
导入依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version> </parent> <properties> <java.ver原创 2020-09-24 14:51:17 · 87 阅读 · 0 评论 -
消息中间件rabbitMQ
简介RabbitMQ是一个消息代理 - 一个消息系统的媒介。它可以为你的应用提供一个通用的消息发送和接收平台,并且保证消息在传输过程中的安全。RabbitMQ实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。其采用Erlang语言编写的,群集和故障转移是构建在开放电信平台框架上的。特点RabbitMQ是部署最广泛的开源消息代理。RabbitMQ有成千上万的用户,是最受欢迎的开源消息代理之一。从T-Mobile 到Runtastic,RabbitMQ在全球范围内的小原创 2020-09-24 14:13:45 · 197 阅读 · 0 评论