消息队列

消息队列-MQ

自作多情 提交于 2019-12-21 02:20:26
原文链接: https://zhuanlan.zhihu.com/p/55712984 01 概述 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。 实现高性能,高可用,可伸缩和最终一致性架构。 使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ。 02 消息队列应用场景 以下介绍消息队列在实际应用中常用的使用场景。异步处理,应用解耦,流量削锋和消息通讯四个场景 2.1 异步处理 场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法有两种 1.串行的方式;2.并行方式 (1)串行方式:将注册信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户端 (2)并行方式:将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信。以上三个任务完成后,返回给客户端。与串行的差别是,并行的方式可以提高处理的时间 假设三个业务节点每个使用50毫秒钟,不考虑网络等其他开销,则串行方式的时间是150毫秒,并行的时间可能是100毫秒。 因为CPU在单位时间内处理的请求数是一定的,假设CPU1秒内吞吐量是100次。则串行方式1秒内CPU可处理的请求量是7次(1000/150)。并行方式处理的请求量是10次(1000/100) 小结:如以上案例描述,传统的方式系统的性能

RabbitMQ入门

与世无争的帅哥 提交于 2019-12-21 01:32:00
RabbitMQ简介 各大主流中间件对比 ActiveMQ 是 Apache 出品,最流行的,能力强劲的开源消息总线,并且它一 个完全支持 J M S 规范的消息中间件。 其丰富的 API 、多种集群构建模式使得他成为业界老牌消息中间件,在中 小型企业中应用广泛! MQ 衡量指标:服务性能、数据存储、集群架构 Kafka RocketMQ是阿里开源的消息中间件,目前也已经孵化为Apache顶级项目, 它是纯java开发,具有高吞吐量、高可用性、适合大规模分布式系统 应用的特点。 RocketMQ思路起源于Kafka,它对消息的可靠传输及事务 性做了优化, 目前在阿里集团被广泛应用于交易、充值、流计算、消息推 送、日志流式处理、binglog分发等场景 RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议 来实现。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布 /订阅)、可靠性、安全。AMQP协议更多用在企业系统内, 对数据_致 性、稳定性和可靠性要求很髙的场景,对性能和吞吐量的要求还在其次 结论: activiMq老牌消息中间件,api全面,但是吞吐量不大 Kafaka吞吐量大,但是数据无法保证不丢失,主要面向大数据 rokectMQ:吞吐量大,保证数据不丢失,并且支持分布式事物,但是商业版需要收费 rabbitMQ:吞吐量大,数据不易丢失

filebeat+kafka搭建

被刻印的时光 ゝ 提交于 2019-12-21 01:19:15
简单介绍: 因为Kafka集群是把状态信息保存在Zookeeper中的,并且Kafka的动态扩容是通过Zookeeper来实现的,所以需要优先搭建Zookeerper集群,建立分布式状态管理。开始准备环境,搭建集群: zookeeper是基于Java环境开发的所以需要先安装Java 然后这里使用的zookeeper安装包版本为zookeeper-3.4.14,Kafka的安装包版本为kafka_2.11-2.2.0。 AMQP协议:Advanced Message Queuing Protocol (高级消息队列协议)是一个标准开放的应用层的消息中间件协议。AMQP定义了通过网络发送的字节流的数据格式。因此兼容性非常好,任何实现AMQP协议的程序都可以和与AMQP协议兼容的其他程序交互,可以很容易做到跨语言,跨平台。 一、首先做好kafka 1、准备三台服务器,推荐每台2个G,记得关闭防火墙 server1:10.0.0.41 server2:10.0.0.42 server3:10.0.0.43 2、三台都得配置jdk环境,1.8以上,修改主机名并且配置主机名 10.0.0.41 hostname kafka01 10.0.0.42 hostname kafka02 10.0.0.43 hostname kafka03 cat /etc/hosts 10.0.0.41

亿级 ELK 日志平台构建实践

时光怂恿深爱的人放手 提交于 2019-12-20 20:33:00
本篇主要讲工作中的真实经历,我们怎么打造亿级日志平台,同时手把手教大家建立起这样一套亿级 ELK 系统。日志平台具体发展历程可以参考上篇 「从 ELK 到 EFK 演进」 废话不多说,老司机们座好了,我们准备发车了~~~ 整体架构 整体架构主要分为 4 个模块,分别提供不同的功能 Filebeat :轻量级数据收集引擎。基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择。 Kafka : 数据缓冲队列。作为消息队列解耦了处理过程,同时提高了可扩展性。具有峰值处理能力,使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。 Logstash :数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。 Elasticsearch :分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 基于 Lucene 开发,现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建自己的搜索引擎。 Kibana :可视化化平台

搭建 RabbitMQ Server 高可用集群

旧城冷巷雨未停 提交于 2019-12-20 18:15:03
原文: 搭建 RabbitMQ Server 高可用集群 阅读目录: 准备工作 搭建 RabbitMQ Server 单机版 RabbitMQ Server 高可用集群相关概念 搭建 RabbitMQ Server 高可用集群 搭建 HAProxy 负载均衡 因为公司测试服务器暂不能用,只能在自己电脑上重新搭建一下 RabbitMQ Server 高可用集群,正好把这个过程记录下来,以便日后查看。 公司测试服务器上的 RabbitMQ 集群,我搭建的是三台服务器,因为自己电脑空间有限,这边只能搭建两台服务器用作高可用集群,用的是 Vagrant 虚拟机管理工具。 环境介绍: RabbitMQ 节点 IP 地址 工作模式 node1 192.168.1.50 DISK CentOS 7.0 - 64位 node2 192.168.1.51 DISK CentOS 7.0 - 64位 整体架构: 1. 准备工作 首先,在 node1 服务器上,修改 vi /etc/hostname : node1 在 node2 服务器上,修改 vi /etc/hostname : node2 然后在 node1 服务器上,修改 vi /etc/hosts : node1 192.168.1.50 node2 192.168.1.51 127.0.0.1 node1 ::1 node1 在 node2

rabbitmq~消息失败后重试达到 TTL放到死信队列(事务型消息补偿机制)

瘦欲@ 提交于 2019-12-20 17:37:49
这是一个基于消息的分布式事务的一部分,主要通过消息来实现,生产者把消息发到队列后,由消费方去执行剩下的逻辑,而当消费方处理失败后,我们需要进行重试,即为了最现数据的最终一致性,在rabbitmq里,它有消息重试和重试次数的配置,但当你配置之后,你的TTL达到 后,消息不能自动放入死信队列,所以这块需要手工处理一下. rabbitmq关于消息重试的配置 rabbitmq: host: xxx port: xxx username: xxx password: xxx virtual-host: xxx ###开启消息确认机制 confirms publisher-confirms: true publisher-returns: true listener: simple: acknowledge-mode: manual #设置确认方式 prefetch: 1 #每次处理1条消息 retry.max-attempts: 3 # 最大重试次数 retry.enabled: true #是否开启消费者重试(为false时关闭消费者重试,这时消费端代码异常会一直重复收到消息) retry.initial-interval: 2000 #重试间隔时间(单位毫秒) default-requeue-rejected: true #该配置项是决定由于监听器抛出异常而拒绝的消息是否被重新放回队列

消息队列activemq

柔情痞子 提交于 2019-12-20 17:14:12
消息队列activemq 首先,我们为什么需要消息队列? 其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么? 面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这个业务场景有个什么技术挑战,如果不用MQ可能会很麻烦,但是你现在用了MQ之后带给了你很多的好处! 先说一下消息队列的常见使用场景吧,其实场景有很多,但是比较核心的有3个:解耦、异步、削峰 1.解耦:现场画个图来说明一下 A系统发送个数据到BCD三个系统,接口调用发送,那如果E系统也要这个数据呢?那如果C系统现在不需要了呢?现在A系统又要发送第二种数据了呢?A系统负责人濒临崩溃中。。。再来点更加崩溃的事儿,A系统要时时刻刻考虑BCDE四个系统如果挂了咋办?我要不要重发?我要不要把消息存起来?头发都白了啊。。。 面试技巧 :你需要去考虑一下你负责的系统中是否有类似的场景,就是一个系统或者一个模块,调用了多个系统或者模块,互相之间的调用很复杂,维护起来很麻烦。但是其实这个调用是不需要直接同步调用接口的,如果用MQ给他异步化解耦,也是可以的,你就需要去考虑在你的项目里,是不是可以运用这个MQ去进行系统的解耦。在简历中体现出来这块东西,用MQ作解耦。 2.异步:现场画个图来说明一下, A系统接收一个请求,需要在自己本地写库,还需要在BCD三个系统写库

舔一舔 · 肌霸Kafka

橙三吉。 提交于 2019-12-20 11:56:26
目录 1、关于Kafka你知道这些术语么? 2、Kafka如何存储数据? 3、kafka扑街了,如何保证高可用? 4、Kafka如何做到数据不丢失? 又是烟雨蒙蒙的冬日,一杯暖茶,春天的气息已经在杯中袅袅升起的热气里荡漾开来,茶醇使人醉,技术要学会。我们来简单剖析一下kafka的一些原理特性。 1、关于Kafka,你知道这些术语吗? Kafka在消息处理领域能独步天下,自然离不开他优良的架构设计,我们先来看看在Kafka的领域里有哪些组件和概念,下面是一些枯燥的名词解释,如果已经掌握,可以帮忙看看是否正确解释了。 Topic ,顾名思义,主题的意思。可以理解为是对某一类型的消息的标识,kafka处理的消息集按照Topic分类,相当于逻辑上的一个消息消息集合。 Partition ,分区,数据分区,数据分片,这是物理存储上的分组,每一个Topic可能对应多个分片,比如Topic为Order的消息需要存放5TB的数据到磁盘,如果分配5个Partition,每个partition就是1TB的数据。 一直在说kafka是分布式,高可靠的消息系统,那么这里就有所体现,多个Partition可以分散在不同的服务器上,将数据存储到不同服务器的磁盘上。 Broker ,Kafka是可以分布式部署集群,集群中多台服务器,每台部署一个Kafka进程,这个Kafka进程就称之为Broker。

微服务用到的技术

。_饼干妹妹 提交于 2019-12-20 09:55:15
微服务条目 技术 备注 服务开发 Springboot、Spring、SpringMVC 服务配置与管理 Netflix公司的Archaius、阿里的Diamond等 服务注册与发现 Eureka、Consul、Zookeeper等 服务调用 REST、RPC、gRPC 服务熔断器 Hystrix、Envoy等 负载均衡 Ribbon、Nginx等 服务接口调用(客户端调用服务发简单工具) Feign等 消息队列 kafka、RabbitMQ、ActiveMQ等 服务配置中心管理 SpringCloudConfig、Chef等 服务路由(API网关) Zuul等 服务监控 Zabbix、Nagios、Metrics、Spectator等 全链路追踪 Zipkin、Brave、Dapper等 服务部署 Docker、OpenStack、Kubernetes等 数据流操作开发包 SpringCloud Stream(封装与Redis,Rabbit、Kafka等发送接收消息) 事件消息总线 SpringCloud Bus 来源: CSDN 作者: 有梦想的小胖孩 链接: https://blog.csdn.net/FGH_123321/article/details/103626587

【RabbitMQ】六种模式与SpringBoot整合

拟墨画扇 提交于 2019-12-20 09:28:22
添加rabbitmq的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> 在配置文件中添加必要的配置信息 spring.rabbitmq.host=192.168.0.86 spring.rabbitmq.port=5672 spring.rabbitmq.username=admin spring.rabbitmq.password=123456 好了,基本的配置就已经配置完毕了 rabbitmq有六种模式 我们逐个来看springboot是怎么实现的呢 1.hello world P 代表生产者, C 代表消费者,红色代码消息队列。 P 将消息发送到消息队列, C 对消息进行处理。 我们先创建一个队列 @Bean public Queue Queue() { return new Queue("hello"); } 然后我再创建一个生产者 @Controller public class HelloSender { @Autowired private AmqpTemplate rabbitTemplate; public void send() { String context =