官网:kafka.apache.orgapache
框架简介tomcat
Apache Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,以后成为Apache项目的一部分。Kafka是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。安全
相关概念架构
** 生产者并发
提供数据源生产的地方,对于同一个topic,生产者只能有一个,这样能够确保同一个topic数据来自同一个业务数据,支持多并发框架
** 消费者分布式
消费数据的客户端,对于同一个topic,能够有多个消费者,好比spark,storm等等高并发
** Broker测试
消息中间件处理结点,一个Kafka节点就是一个broker,多个broker能够组成一个Kafka集群。大数据
** Topic
同一类消息的统称,Kafka集群可以同时负载多个topic分发。
** Partition
topic物理上的分组,一个topic能够分为多个partition,每一个partition是一个有序的队列,同一个topic里面的数据是存放在不一样的分区中。
** Replication
每一个分区或者topic都是有副本的,副本的数量也是能够在建立topic的时候就指定好,保证数据的安全性,以及提供高并发读取效率。
** Segment
partition物理上由多个segment组成
** Offset
每一个partition都由一系列有序的、不可变的消息组成,这些消息被连续的追加到partition中。partition中的每一个消息都有一个连续的序列号叫作offset,用于partition惟一标识一条消息
框架特点
** 同时为发布和订阅提供高吞吐量。Kafka每秒能够生产约25万消息(约50 MB),每秒处理55万消息(约110 MB)。
** 可进行持久化操做。将消息持久化到磁盘,所以可用于批量消费,例如ETL,以及实时应用程序。经过将数据持久化到硬盘以及replication防止数据丢失。
** 分布式系统,易于向外扩展。全部的producer、broker和consumer都会有多个,均为分布式的。无需停机便可扩展机器。
** 消息被处理的状态是在consumer端维护,而不是由server端维护。当失败时能自动平衡。
架构图
** 相关下载
kafka以及scala:连接:http://pan.baidu.com/s/1pLBFJf1 密码:seto
** 解压Kafka以及scala
$ tar -zxf kafka_2.10-0.8.2.1.tgz -C /opt/modules/cdh/
$ tar -zxf scala-2.10.4.tgz -C /opt/modules/cdh/
** 安装JDK并配置环境变量
再也不赘述
** 安装并启动zookeeper
在zookeeper的根目录下:
$ bin/zkServer.sh start
** 配置scala环境变量
# vi /etc/profile
$ source /etc/profile
(注意以上两条语句的执行用户)
添加以下:
##SCALA_HOME
SCALA_HOME=/opt/modules/cdh/scala-2.10.4
export PATH=$PATH:$SCALA_HOME/bin
使用命令检查scala配置是否正确:
$ scala -version,如图:
** 修改Kafka配置文件
server.properties
修改成以下:
producer.properties
变更内容以下:
consumer.properties
变更内容以下:
** 启动Kafka
$ bin/kafka-server-start.sh config/server.properties
** 建立Topic
$ bin/kafka-topics.sh --create --zookeeper z01:2181 --replication-factor 1 --partitions 1 --topic testTopic
** 启动生产者
$ bin/kafka-console-producer.sh --broker-list z01:9092 --topic testTopic
** 启动消费者
$ bin/kafka-console-consumer.sh --zookeeper z01:2181 --topic testTopic --from-beginning
在生产者窗口输入数据,在消费者窗口查看数据,测试如图:
消费者:
生产者:
使用flume+kafka整合测试
** 配置flume
原来咱们配置flume,是在tomcat所在机器节点开启了一个flume收集日志,并直接上传到HDFS,若是集群中存在多个机器节点,则势必致使对HDFS集群占用率太高,因此在面临多个flume集群时,通常会采用1~2个单独的flume节点来收集另外flume节点的日志,至关于弄了一个中转站,由中转站收集其余flume,再统一放置到HDFS系统中,此刻咱们采用方案2,原理如图:
背景:在一台机器上开两个flume,分别收集tomcat日志和hive日志,这二者的日志信息分别输入到中间层flume(这个中间层flume也模拟在同一个机器节点上),而后中间层flume在将数据写入到HDFS。
首先检查一下hive的conf目录下的hive-log4j.properties配置中,是否已经指定了hive的日志目录,若是没有,请指定,如图:
涉及flume文件:如下文件存在于flume的conf目录下,若是不存在,请自行建立便可。
flume-apache-log-kafka.conf
flume-hive-log-kafka.conf
flume-connector-kafka.conf
依次启动:
a4:
$ bin/flume-ng agent --conf conf/ --name a4 --conf-file conf/flume-connector-kafka.conf
a3:
$ bin/flume-ng agent --conf conf/ --name a3 --conf-file conf/flume-hive-log-kafka.conf
a2:
$ bin/flume-ng agent --conf conf/ --name a2 --conf-file conf/flume-apache-log-kafka.conf
测试后如图,便可发现,日志在HDFS和kafka中都已经显示出来:
我的微博:http://weibo.com/seal13
QQ大数据技术交流群(广告勿入):476966007
做者:Z尽际连接:https://www.jianshu.com/p/a24af7a86392來源:简书著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。