消息队列的做用以及kafka和activemq的对比

记录下平时使用kafka的姿式。算法

背景分析

消息队列这个类型的组件一直是很是重要的组件,当通过两家企业后我就很坚信这个结论了。队列这种东西,最普遍的做用仍是在于解耦,宽泛一点的说,它能够将不一样部门的工做内容进行有效的整合,基于一个约定好的格式,就能够两头互相不干扰的进行开发。能够说这个生产消费的思想不单单适用于程序也适用于很是多的地方。
目前对于我看到的来讲,kafka更多的仍是作为一个数据源,数据桥梁的做用,不一样业务之间的沟通。好比须要实时接入A部门的业务数据的话,就会有这样的手段:服务器


10574740-09c59aa6d1da77c8.png

落地到HDFS的数据会用来进行一些算法上的离线处理,而kafka端则是给须要实时性的消费方。其实数据的消费方式无非也就实时和离线两种方式。session

Kafka和activemq对比

相比过去常常使用的activemq,kafka确实很是的不一样,作一个对比来深化印象oop

对比 Activemq Kafka
接口协议 遵照JMS规范,各语言支持较好 没有遵循标准MQ接口协议,使用较为复杂
吞吐量 较低,磁盘随机读写 较高,磁盘顺序读写
游标位置 AMQ来管理,没法读取历史数据 客户端本身管理,不乐意甚至从新读一遍也行
HA机制 主从复制,竞争锁的方式来选举新的主节点 和hadoop系列产品同样,由zk管理全部节点

说到底,主要仍是作为kafka的消费方,能感觉到最大的不一样仍是在于几个:日志

  1. 吞吐量确实很是高
    2.能够重读历史数据
    可是也有一些缺点:
    1.概念上比较复杂,相对于AMQ只须要知道ip和队列名你就能得到数据,Kafka使用起来很是繁琐

Kafka的基本概念(摘录)

1.Broker:消息中间件处理结点,一个Kafka节点就是一个broker,多个broker能够组成一个Kafka集群。
2.Topic:一类消息,例如page view日志、click日志等均可以以topic的形式存在,Kafka集群可以同时负责多个topic的分发。
3.Partition:topic物理上的分组,一个topic能够分为多个partition,每一个partition是一个有序的队列。
4.Segment:partition物理上由多个segment组成。
5.offset:每一个partition都由一系列有序的、不可变的消息组成,这些消息被连续的追加到partition中。partition中的每一个消息都有一个连续的序列号叫作offset,用于partition惟一标识一条消息.code

Kafka消费端的经常使用参数

Properties props = new Properties();
                //zk服务器的地址  xxxx:2181
        props.put("zookeeper.connect", zookeeper);
                //组的名称,区别于其余group不然会接收不到数据
        props.put("group.id", groupId);
        props.put("zookeeper.session.timeout.ms", "8000");
        props.put("zookeeper.connection.timeout.ms", "20000");
        props.put("zookeeper.sync.time.ms", "2000");
        props.put("auto.commit.interval.ms", "5000");
        props.put("rebalance.max.retries", "5");
        props.put("rebalance.backoff.ms", "60000");
        props.put("auto.commit.enable", "true");
                //重点参数,是否每次都从offset最前面开始读起
        props.put("auto.offset.reset", "smallest");

Kafka的一些经常使用命令

查看全部的topic中间件

bin/kafka-topics.sh --zookeeper zk1.test-inf-zk.data.m.com:2181/octopus,zk2.test-inf-zk.data.m.com:2181/octopus,zk3.test-inf-zk.data.m.com:2181/octopus --list

查看topic的偏移量blog

bin/kafka-run-class.sh kafka.tools.GetOffsetShell --topic xiuxiu_sync_search_big_data --time -1 --broker-list 192.168.199.11:9092 --partitions 0

查看topic的状态接口

bin/kafka-topics.sh --zookeeper 192.168.199.11:2181 --topic xiuxiu_sync_search_big_data --describe