分布式消息

分布式消息:kafka、RabbitMQ、RocketMQ、Spring Cloud Stream

关于kafka、更好的跨平台支持、以及高效的处理速度、有种说法是:即使在普通的机子上也可以处理每秒十万条数据、
设计目标:
1、以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能
2、高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输
3、支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输
4、同时支持离线数据处理和实时数据处理

kafka架构:
kafka架构

如上图所示,一个典型的kafka集群中包含若干producer(可以是web前端产生的page view,或者是服务器日志,系统CPU、memory等),若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越高),若干consumer group,以及一个Zookeeper集群。Kafka通过Zookeeper管理集群配置,选举leader,以及在consumer group发生变化时进行rebalance。producer使用push模式将消息发布到broker,consumer使用pull模式从broker订阅并消费消息。

Push vs. Pull

  作为一个messaging system,Kafka遵循了传统的方式,选择由producer向broker push消息并由consumer从broker pull消息。一些logging-centric system,比如Facebook的Scribe和Cloudera的Flume,采用非常不同的push模式。事实上,push模式和pull模式各有优劣。
  push模式很难适应消费速率不同的消费者,因为消息发送速率是由broker决定的。push模式的目标是尽可能以最快速度传递消息,但是这样很容易造成consumer来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而pull模式则可以根据consumer的消费能力以适当的速率消费消息。

Topic & Partition

  Topic在逻辑上可以被认为是一个queue。每条消费都必须指定它的topic,可以简单理解为必须指明把这条消息放进哪个queue里。为了使得Kafka的吞吐率可以水平扩展,物理上把topic分成一个或多个partition,每个partition在物理上对应一个文件夹,该文件夹下存储这个partition的所有消息和索引文件。

kafka平台管理工具  Kafka Manager是Yahoo开源的Kafka管理工具。
它支持如下功能
1、管理多个集群
2、方便查看集群状态
3、执行preferred replica election
4、批量为多个Topic生成并执行Partition分配方案
5、创建Topic
6、删除Topic(只支持0.8.2及以上版本,同时要求在Broker中将delete.topic.enable设置为true)
7、为已有Topic添加Partition
8、更新Topic配置
9、在Broker JMX Reporter开启的前提下,轮询Broker级别和Topic级别的Metrics
10、监控Consumer Group及其消费状态
11、支持添加和查看LogKafka

抄袭地址:http://www.jasongj.com/2015/03/10/KafkaColumn1/

RabbitMQ :官方的技术亮点有很多、最显眼的就是多协议了吧、比别的支持的协议都多、支持持久化、也就防止消息丢失了、广泛的客户端、官方文档:只要是你能想到的编程语言几乎都有与其相适配的RabbitMQ客户端。
抄袭地址:http://rabbitmq.mr-ping.com/description.html

Rocket MQ:阿里开源
关键特性以及其实现原理:
一、顺序消息
二、消息重复
RocketMQ不保证消息不重复,如果你的业务需要保证严格的不重复消息,需要你自己在业务端去重。
三、事务消息

RocketMQ除了支持普通消息,顺序消息,另外还支持事务消息。首先讨论一下什么是事务消息以及支持事务消息的必要性。
四、Producer如何发送消息

Producer轮询某topic下的所有队列的方式来实现发送方的负载均衡,如下图所示:
这里写图片描述

五、消息存储

RocketMQ的消息存储是由consume queue和commit log配合完成的。

1、Consume Queue

consume queue是消息的逻辑队列,相当于字典的目录,用来指定消息在物理文件commit log上的位置。

我们可以在配置中指定consumequeue与commitlog存储的目录
每个topic下的每个queue都有一个对应的consumequeue文件,比如:

${rocketmq.home}/store/consumequeue/${topicName}/${queueId}/${fileName}

3、消息存储实现

4、消息的索引文件

六、消息订阅

RocketMQ消息订阅有两种模式,一种是Push模式,即MQServer主动向消费端推送;另外一种是Pull模式,即消费端在需要时,主动到MQServer拉取。但在具体实现时,Push和Pull模式都是采用消费端主动拉取的方式。

抄袭地址:http://www.jianshu.com/p/453c6e7ff81c

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值