常用的消息中间件

消息中间件是当前处理大数据的一个非常重要的组件,用来解决应用解耦、异步通信、流量控制等问题,从而构建一个高效、灵活、消息同步和异步传输处理、存储转发、可伸缩和最终一致性的稳定系统。目前业界应用比较多的分布式消息中间件主要包括:ActiveMQ、RabbitMQ、Kafka、RocketMQ,虽然都是分布式消息中间件,但是每种消息中间件使用方式区别还是很大的。

ActiveMQ

  • 优点:Apache开源,功能集全,文档多,历史悠久,支持多语言客户端,使用简单。

  • 缺点:性能比较低、只支持主从架构,扩展性差。

RabbitMQ

  • 优点:用Erlang语言实现,性能比ActiveMQ高,功能丰富,支持协议多(AMQP、XMPP、SMTP)。

  • 缺点:虽然性能比ActiveMQ好,但比Kafka、RocketMQ还是有差距,只支持主从方式。扩展性差

Kafka

  • 优点:Apache开源,性能非常高,可靠性好,分布式扩展能力,支持多语言。

  • 缺点:管理工具少,支持协议少

RocketMQ

  • 优点:Apache开源,java语言实现,学习了Kafka的设计理念,继承了高性能、扩展性好。功能对企业应用支持比较好了,如定时消息。

kafka设计目标

以时间复杂度为O1的方式 提供消息持久化能力,即使对TB级的数据也能保证常数级时间的访问能力。

高吞吐率,即使在廉价的商用机器上,也能做单机10万条每秒的传输率。

支持消息分区,及分布式消费,保证每个分区的消息顺序消费

支持离线数据处理和实时数据处理

支持在线水平扩展

Kafka的特性

  • 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。

  • 可扩展性:kafka集群支持热扩展

  • 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失

  • 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)

  • 高并发:支持数千个客户端同时读写

应用场景

消息系统:

KafKa作为一个优秀的消息系统,具有高吞吐量、内置的分区、备份冗余分布式的特点,为大规模的消息处理提供了一种很好的解决方案;

应用监控:

利用KafKa收集应用程序和服务器健康相关指标,如CPU占用率、IO、内存、连接数、TPS、QPS等,然后将指标信息进行处理

流处理:

需要将已经收集的流数据,如系统的点击、浏览事件,提供给其他流式计算框架进行处理,Spark Stream, Storm Flink;

持久性日志:

KafKa可以为外部系统提供一种持久性日志的分布式系统。日志可以在多个节点之间进行备份

Kafka概念

  • Message(消息):一条数据,每条消息都有一个键和对应的一个值。

  • producer(生产者):将消息发布到 topics。Producer 决定向 topic 分区的发布方式

  • consumer(消费者):消息的订阅者

  • Consumer Group:consumer的逻辑组,一条消息,只能被同一个Consumer Group消费一次。

  • topic(主题):消息的分类。消费者通过订阅Topic来读取数据

  • partition(分区):一个topic至少一个分区,不同分区不保证消息的消费顺序。更多的分区意会着,更高吞吐能力。同时会打开更多的文件句柄。进程打开的文件句柄是目前Kafka系统的一大瓶颈。Kafka broker使用的是本地文件系统,这将会影响Kafka往流式架构发展,也许Kafka以后会支持分布式的文件系统。如MapR Stream.

  • Broker:Kafka 以分布式系统/集群方式运行。集群中的每个节点称一个 Broker,负责消息的持久化,可以横向扩展。

  • Replication:Kafka消息的备份,实现数据冗余,保障数据尽量不丢失;

  • Offset(偏移量):消息是存储在broker上的分区里

  • ISR(In-sync Replica):可用同步的副本列表,ISR<Replication,消息在所有复本同步的过程中,有的节点同步速度比较慢,如果和Leader差比较多,这个时这个节点的复本就会被从ISR中移除,当同步进度跟上leader后重新加入ISR

Kafka的创新

消息的持久化的时间:不再需要跟踪特定消息的读取情况,设定消息的保留时间。确保消息被读取之后再删除。

消费者可以自己管理消息偏移量offset,Kafka可以将消息存储在文件系统上,读取消息时就和读文件一样,可以顺序性的读消息。因此Kafka的处理消息的速度非常快。

Kafka的缺点

Topic和分区数量问题,Kafka在上万的topic面前,性能会非常低下。

手动均均衡分区负载,不能自动实现负载均衡

没有固定的序列化机制,如果大规模使用时,不一样的序列机制,就无法兼容通讯

镜像不足,Kafka只是简单把消息转发,生产者和消费者却不能转移过去

下一代的消息系统-MapR Stream

被称为下一代的消息系统,使用MapR平台的分布式文件系统,在存储上比KafKa更加强大。它的应用是在Kafka等消息队列都无法满足时,才考虑的一个消息系统。当前的架构都是请求响应型,无法满足现实生活的实时性,像当前的直播系统,或者其他实时的系统,对消息实时性有很高的要求,主是、数据量都很大时,Kafka消息队列可能也无法满足。

kafka概述与下一代消息队列的更多相关文章

  1. 为什么要用kafka、rabbit等消息队列

    1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许多消息队列所采用的&q ...

  2. Kafka,Mq,Redis作为消息队列有何差异?

    Kafka作为新一代的消息系统,mq是比较成熟消息系统,而redis也可以发布订阅,那么这三者有何异同? RabbitMQ 是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,X ...

  3. 【kafka】一、消息队列

    在高并发的应用场景中,由于来不及同步处理请求,接收到的请求往往会发生阻塞.例如,大量的插入.更新请求同时到达数据库,这会导致行或表被锁住,最后会因为请求堆积过多而触发“连接数过多的异常” 的错误.因此 ...

  4. 消息队列,RabbitMQ、Kafka、RocketMQ

    目录 1.消息列队概述 1.1消息队列MQ 1.2AMQP和JMS 1.2.1AMQP 1.2.2JMS 1.2.3AMOP 与 JMS 区别 1.3消息队列产品 1.3.1 Kafka 1.3.2 ...

  5. 消息队列与Kafka

    2019-04-09 关键词: 消息队列.为什么使用消息队列.消息队列的好处.消息队列的意义.Kafka是什么 本篇文章系本人就当前所掌握的知识关于 消息队列 与 kafka 知识点的一些简要介绍,不 ...

  6. 【消息队列】kafka是如何保证高可用的

    一.kafka一个最基本的架构认识 由多个broker组成,每个broker就是一个节点:创建一个topic,这个topic可以划分为多个partition,每个partition可以存在于不同的br ...

  7. 消息队列Kafka学习记录

    Kafka其实只是众多消息队列中的一种,对于Kafka的具体释义我这里就不多说了,详见:http://baike.baidu.com/link?url=HWFYszYuMdP_lueFH5bmYnlm ...

  8. POSIX 消息队列 之 概述 链接方式

    NAMEmq_overview —— POSIX消息队列概述 DESCRIPTIONPOSIX消息队列允许进程以消息的形式交换数据.此API与System V消息队列(msgget(2),msgsnd ...

  9. 消息队列kafka

    消息队列kafka   为什么用消息队列 举例 比如在一个企业里,技术老大接到boss的任务,技术老大把这个任务拆分成多个小任务,完成所有的小任务就算搞定整个任务了. 那么在执行这些小任务的时候,可能 ...

随机推荐

  1. [poj1363]Rails_模拟_栈

    Rails poj-1363 题目大意:判断一个序列是否是1~n的合法出栈序列. 注释:$1\le n\le 10^4$. 想法:开始想到一种想法. 对于一段序列来讲,显然从首元素开始的连续小于尾元素 ...

  2. MyBatis 3模糊查询(like)写法(转)

    说明:以下写法可以同时支持XML和注解的形式. 1.SQL中字符串拼接 SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{tex ...

  3. iOS:改变UITableViewCell的选中背景色

    要改变UITableViewCell选中时的背景色,需要在-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtInde ...

  4. (七)CAS 本地localhost调试,无法单点退出疑问

            干活的时候要多思考-------- 题记          昨天下午接到任务把内容汇聚平台和分发平台加上统一认证登录,之前弄过CAS,想想这个过程也就是按部就班的事情.在两个系统中we ...

  5. UIView 的图层关系

    个人认为用字母取代这样的比較好理解,.给新人学习 addSubview是一层一层往上加,新加的仅仅能放到父视图的最上层, insertSubView能够控制它加入到父视图的哪一层  A addSubv ...

  6. #定位系统性能瓶颈# sysdig

    安装方法: curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash [root@l ...

  7. ubuntu下C程序的编辑、编译、运行

    均以hello world程序为例 一.vim hello.c/hello.cpp 创建hello.c/hello.cpp文件,并进入vim界面 二.此时按键盘上的很多键均不会有任何反应,键入i,进入 ...

  8. spring:使用<prop>标签为Java持久属性集注入值

    spring:使用<prop>标签为Java持久属性集注入值 使用 spring 提供的<prop>为Java持久属性集注入值,也就是向 java.util.Propertie ...

  9. codeforces 898F Hash

    F. Restoring the Expression time limit per test 2 seconds memory limit per test 256 megabytes input ...

  10. Coursera Algorithms Programming Assignment 2: Deque and Randomized Queue (100分)

    作业原文:http://coursera.cs.princeton.edu/algs4/assignments/queues.html 这次作业与第一周作业相比,稍微简单一些.有三个编程练习:双端队列 ...