Kafka简介

  categories:mq, 资料  tags:, ,   author:

1. 引言

互联网够公司的日志无处不在,web日志,js日志,搜索日志,监控日志等等。对于这些日志的离线分析 (Hadoop),wget&rsync虽然人力维护成本较高,但可以满足功能行需求。但对于这些日志的实时分析需求(例如实时推荐,监控系 统),则往往必须要引入一些“高大上”的系统。

传统的企业消息系统(例如WebSphere)并不是非常适合大规模的日志处理系统,理由如下:
1) 过于关注可靠性,这些可靠性增加了系统实现&API的复杂度,而在日志处理过程中,丢失几条日志常常“无伤大雅”
2) 包括API,scale及消息缓冲的设计理念都不适合Hign Throughput的日志处理系统

针对这些问题,近些年各个公司都做了一些自己的日志收集系统,例如:Facebook的Scribe、Yahoo的data highway,Cloudera的Flume,Apache的Chukwa,百度的BigPipe,阿里的RocketMQ。

Kafka是LinkedIn开发并开源出来的一个高吞吐的分布式消息系统。其具有以下特点:
1) 支持高Throughput的应用
2)  scale out:无需停机即可扩展机器
3) 持久化:通过将数据持久化到硬盘以及replication防止数据丢失
4) 支持online和offline的场景。

2. 介绍

kafka使用scala开发,支持多语言客户端(c++、java、python、go等)其架构如下[2]:

Producer:消息发布者
Broker:消息中间件处理结点,一个kafka节点就是一个broker
Consumer:消息订阅者

kafka的消息分几个层次:
1) Topic:一类消息,例如page view日志,click日志等都可以以topic的形式存在,kafka集群能够同时负责多个topic的分发
2) Partition: Topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。
3) Message:消息,最小订阅单元

具体流程:
1. … 阅读全文

kafka入门

  categories:mq  tags:, ,   author:
一、kafka入门
    1、简介
    Kafka is a distributed,partitioned,replicated commit logservice。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。kafka对消息保存时根据Topic进行归类,发送消息者成为Producer,消息接受者成为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为broker。无论是kafka集群,还是producer和consumer都依赖于zookeeper来保证系统可用性集群保存一些meta信息。
<ignore_js_op>
   2、Topics/logs
    一个Topic可以认为是一类消息,每个topic将被分成多个partition(区),每个partition在存储层面是append log文件。任何发布到此partition的消息都会被直接追加到log文件的尾部,每条消息在文件中的位置称为offset(偏移量),offset 为一个long型数字,它是唯一标记一条消息。它唯一的标记一条消息。kafka并没有提供其他额外的索引机制来存储offset,因为在kafka中几 乎不允许对消息进行“随机读写”。

 

<ignore_js_op>

 

    kafka和JMS(Java Message Service)实现(activeMQ)不同的是:即使消息被消费,消息仍然不会被立即删除.日志文件将会根据broker中的配置要求,保留一定的时 间之后删除;比如log文件保留2天,那么两天后,文件会被清除,无论其中的消息是否被消费.kafka通过这种简单的手段,来释放磁盘空间,以及减少消 息消费之后对文件内容改动的磁盘IO开支.
    对于consumer而言,它需要保存消费消息的offset,对于offset的保存和使用,有consumer来控制;当consumer正常消费消 息时,offset将会”线性”的向前驱动,即消息将依次顺序被消费.事实上consumer可以使用任意顺序消费消息,它只需要将offset重置为任 意值..(offset将会保存在zookeeper中,参见下文)
    kafka集群几乎不需要维护任何consumer和producer状态信息,这些信息有zookeeper保存;因此producer和consumer的客户端实现非常轻量级,它们可以随意离开,而不会对集群造成额外的影响.
    partitions的设计目的有多个.最根本原因是kafka基于文件存储.通过分区,可以将日志内容分散到多个server上, 来避免文件尺寸达到单机磁盘的上限,每个partiton都会被当前server(kafka实例)保存;可以将一个topic切分多任意多个 partitions,来消息保存/消费的效率.此外越多的partitions意味着可以容纳更多的consumer,有效提升并发消费的能力.(具体 原理参见下文).
    3、Distribution
    一个Topic的多个partitions,被分布在kafka集群中的多个server上;每个server(kafka实例)负责 partitions中消息的读写操作;此外kafka还可以配置partitions需要备份的个数(replicas),每个partition将会 被备份到多台机器上,以提高可用性.
    基于replicated方案,那么就意味着需要对多个备份进行调度;每个partition都有一个
阅读全文

ActiveMQ入门

  categories:mq, 资料  tags:,   author:

摘要:本文主要讲述ActiveMQ的基本知识和使用方法,并简单结合spring使用ActiveMQ

一、ActiveMQ特性和使用总览

企业消息软件从80年代起就存在,它不只是一种应用间消息传递风格,也是一种集成风格。因此,消息传递可以满足应用间的通知和互相操作。但是开源的解决方案是到最近10年才出现的。Apache ActiveMQ就是其中一种。它使应用间能以异步,松耦合方式交流。本章将向您介绍ActiveMQ

ActiveMQApache软件基金下的一个开源软件,它遵循JMS1.1规范(Java Message Service),是消息驱动中间件软件(MOM)。它为企业消息传递提供高可用,出色性能,可扩展,稳定和安全保障。ActiveMQ使用Apache许可协议。因此,任何人都可以使用和修改它而不必反馈任何改变。这对于商业上将ActiveMQ用在重要用途的人尤为关键。MOM的工作是在分布式的各应用之间调度事件和消息,使之到达指定的接收者。所以高可用,高性能,高可扩展性尤为关键。阅读全文

ActiveMQ简介

  categories:mq, 资料  tags:,   author:

来源:互联网

1. ActiveMQ简介

ActiveMQ Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

主要特点:

1. 多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP阅读全文

JMS消息

  categories:mq  tags:,   author:

1 .消息队列概述

消息队列是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。

2 .JMS

JMS是由包括Sun MicrosystemsIBM等在内的几个公司合作设计的一个面向消息的中间件(MOMAPIJMS定义了Java 中访问消息中间件的接口,但JMS 只是接口,并没有给予实现,实现JMS 接口的消息中间件称为JMS提供者(JMS Provider)。JMS的目的是应用程序能在异步情况下可靠地传输和接受消息。从编程的角度来看,JMS可以被当作一个容器管理的资源,与JDBC连接类似。正如可以通过JDBC去访问许多不同的关系数据库一样,可以通过JMS阅读全文

ActiveMQ调优参考及测试资料

  categories:mq  tags:,   author:

一. 关于ActiveMQ

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

相关网站如下:

http://activemq.apache.org/

可以在官网获取常用的帮助文档。

二. 关于Fuse Message Broker

Fuse Message Broker 是FuseSource提供的Apache ActiveMQ可信发布版本。FuseSource 作 为Apache ActiveMQ社区的一部分,负责其所有的开发和bug修复,所以这两者没有什么不同。FuseSource也许比Apache发布的更为频繁,因此可 能Fuse Message Broker发布的版本比Apache ActiveMQ发布的版本在更新bug修复上要响应的更快

相关网站如下:

http://fusesource.com/products/enterprise-activemq/

三. ActiveMQ调优资料

下面是一个ActiveMQ调优参考资料,资料原内容是基于ActiveMQ的Fuse Broker的调优文档

http://pan.baidu.com/s/1o6DHtge

部分参考内容如下下图等

四.

阅读全文

activemq的消息存储机制

  categories:mq  tags:,   author:

一.KahaDB简介

ActiveMQ 5.3以后,出现了KahaDB。她是一个基于文件支持事务的消息存储器,是一个可靠,高性能,可扩展的消息存储器。
她的设计初衷就是使用简单并尽可能的快。KahaDB的索引使用一个transaction log,并且所有的destination只使用一个index,有人测试表明:如果用于生产环境,支持1万个active connection,每个connection有一个独立的queue。该表现已经足矣应付大部分的需求。
KahaDB内部分为:data logs, 按照Message ID高度优化的索引,memory message cache。

data logs扮演一个message journal,存储消息和命令。当大小超过了规定,将会新建一个data log
.所有在data log里的消息是引用计数的,所以当一个log里的消息不在需要了,这里在添加一句, 经过测试是这个文件中全部消息都可以不再需要了, 才进行后续操作, 假若有一条消息还需要保留, 则整个文件都是被保留的, 因此若是, 您万一多个或者全部日志文件里面都有少量消息需要保存, 这样会造成日志的无法删除,在最坏的情况下, 若是配置了相关的kahadb的相关流控(其实也是磁盘容量,内存容量等的限制),若是日志文件长期无法删除, 会造成生产者无法再发消息(由于磁盘空间占用等达到限额, 并且日志又不能删除,没有多余磁盘空间,因此在配置正确情况下, 客户端会接受到相关的异常信息, 配置不好的, 用户会被挂起,并且没有异常消息的。),可以被删除或者放入archived文件夹。每次消息的写入都是在log的末尾增加记录,所以存储速度很快。
缓存则是临时持有那些有对应消费者在线的消息。如果消费者反馈消息已经成功接收,那么这些消息就不用写入磁盘。
BTree索引,保存消息的引用,并按照message ID排序。Redo log是用来保证MQ broker未干净关闭情况下,用于Btree index的重建。
KahaDB的目录会在你启动MQ后自动创建(使用了KAhaDB作为存储器),

db log … 阅读全文

ActiveMQ学习入门-快速安装与测试

  categories:mq, 资料  tags:,   author:

一. ActiveMQ简介

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

⒈ 多种语言和协议编写客户端。语言: Java,C,C++,C#,Ruby,Perl,Python,PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP

⒉ 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)

⒊ 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性

⒋ 通过了常见J2EE服务器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上

⒌ 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA

⒍ 支持通过JDBC和journal提供高速的消息持久化

⒎ 从设计上保证了高性能的集群,客户端-服务器,点对点

⒏ 支持Ajax

⒐ 支持与Axis的整合

⒑ … 阅读全文




快乐成长 每天进步一点点      京ICP备18032580号-1