Kafka安装与整合flume,Sparkstreaming的简单实例测试

Kafka是一种高吞吐量的分布式消息系统,Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群机来提供实时的消费。下面介绍有关Kafka的简单安装和使用,想全面了解Kafka,请访问Kafka的官方博客http://kafka.apache.org/
首先要玩Kafka必须依赖于zookeeper,所以在安装Kafka之前首先得安装zookeeper
安装zookeeper很简单,按照cloudera官网的做法https://www.cloudera.com/documentation/enterprise/5-13-x/topics/cdh_ig_zookeeper_installation.html#topic_21

Apache ZooKeeper是一种高度可靠且可用的服务,可在分布式进程之间提供协调。

注意: 有关详细信息
Apache ZooKeeper站点:
http://zookeeper.apache.org/。
ZooKeeper是一种用于分布式应用程序的高性能协调服务。它在一个简单的界面中公开了常用服务 - 例如命名,配置管理,同步和组服务 - 因此您不必从头开始编写它们。您可以使用现成的方法来实现共识,组管理,领导者选举和在线协议。您可以根据自己的特定需求进行构建。
本次使用的是Centos6.7系统在三台虚拟机器上使用yum源下载zookeeper
安装zookeeper基础包
sudo yum install zookeeper
安装zookeeper服务器包
sudo yum install zookeeper-server
要创建/ var / lib / zookeeper并设置权限:
mkdir -p /var/lib/zookeeper
chown -R zookeeper /var/lib/zookeeper/
如果在全新安装后部署多个ZooKeeper服务器,则需要创建一个 myid文件在数据目录中。你可以通过一个方法来做到这一点 在里面 命令选项:
三台机器依次进行,
sudo service zookeeper-server init --myid = 1
sudo service zookeeper-server init --myid = 2
sudo service zookeeper-server init --myid = 3
启动或者重启zookeeper服务进程
sudo service zookeeper-server start
sudo service zookeeper-server restart
部署ZooKeeper集合需要一些额外的配置。配置文件(zoo.cfg)在每个服务器上必须包含集合中所有服务器的列表,并且每个服务器还必须具有 我的身份 文件在其数据目录中(默认情况下) 在/ var / lib中/饲养员)它将其标识为整体中的一个服务器。在每台服务器上进行如下操作。
使用单个服务器 上安装ZooKeeper服务器包和启动ZooKeeper下的命令进行安装动物园管理员服务器 在每个主机上。
测试预期的负载以设置Java堆大小以避免交换。确保您远低于系统开始交换的阈值; 例如12GB用于具有16GB RAM的机器。
创建配置文件。可以根据需要调用此文件,并且必须至少指定ZooKeeper管理员指南中 “最低配置”下显示的参数的设置。您还应该为其配置值initLimit, syncLimit,和 服务器。ñ; 见说明管理员指南中。例如:
滚动时间= 2000
DATADIR =的/ var / lib中/动物园管理员/
CLIENTPORT = 2181
initLimit = 5
syncLimit = 2
server.1 = zoo1:2888:3888
server.2 = zoo2:2888:3888
server.3 = zoo3:2888:3888
在此示例中,最后三行是在表单中 服务器。id = hostname:port:port。第一个端口是集合中的跟随者来听取领导者的意见; 第二是领导选举。您可以在下一步中为每个服务器设置ID。
在服务器中创建名为myid的文件DATADIR; 在这个例子中,/ var / lib / zookeeper / myid。该文件必须只包含一行,该行必须包含一个介于1和255之间的唯一编号。这是上一步中提到的id组件。在此示例中,主机名为的服务器zoo1必须有一个仅包含的myid文件1。
按照上一节中的说明启动每个服务器。
通过运行ZooKeeper客户端来测试部署:
zookeeper-client

进行kafka的安装测试,以及和flume,SparkStreaming的集成测试
cd /etc/yum.repos.d/
wget http://archive.cloudera.com/kafka/redhat/6/x86_64/kafka/cloudera-kafka.repo
vi cloudera-kafka.repo
将版本的3改为2.0.0是本次使用的版本
sudo yum clean all
sudo yum install kafka
sudo yum install kafka-server
创建数据文件储存目录,自定义目录
mkdir -p /data/log/kafka-logs
编辑每个节点上的/etc/kafka/conf/server.properties以确保broker.id对于
Kafka集群中的每个节点和代理是唯一的,
并且zookeeper.connect指向所有节点和代理的相同ZooKeeper端口。

log.dirs=/etc/log/kafka-logs
zookeeper.connect=hadoop1:2181,hadoop2:2181,hadoop3:2181

在每台节点上启动kafka服务sudo service kafka-server start
要验证所有节点是否已正确注册到同一ZooKeeper,
请使用连接到动物园管理员客户端
zookeeper-client
查看该zookeeper下有什么kafka的id已经注册
ls /brokers/ids
您应该会看到您在Kafka群集中注册的代理的所有ID。

要发现分配了特定ID的节点,请使用以下命令:
可以发现该zookeeper上的指定id的kafka服务器信息
get /brokers/ids/ID
进入日志目录查看日志信息,用以排查错误
cd /var/log/kafka
tail -F server.log

/usr/bin/kafka-topics --zookeeper 服务器IP或者服务器名(使用服务器名要指定映射).com:2181 --list
创建topice
/usr/bin/kafka-topics --create --zookeeper hadoop3:2181 --replication-factor 3 --partitions 4 -topic topic_1
卡夫卡控制台消费者
从Kafka主题中读取数据并将其写入标准输出。例如:
/usr/bin/kafka-console-consumer --zookeeper hadoop3:2181 --topic topic_1
卡夫卡控制台生产者
从标准输出中读取数据并将其写入Kafka主题。例如:
/usr/bin/kafka-console-producer --broker-list hadoop2:9092,hadoop3:9092 -topic topic_1

/usr/bin/kafka-topics --describe --zookeeper localhost:2181 --topic test
进入/etc/flume-ng/conf/
创建相应的flume任务启动配置文件,如flume.conf,flume_kafka.conf等
集体配置参数参考官网
https://www.cloudera.com/documentation/kafka/latest/topics/kafka_spark.html#xd_583c10bfdbd326ba-590cb1d1-149e9ca9886--6fed

配置参数文件flume_kafka.conf
内容如下:
tier1.sources = source1
tier1.channels = channel1
tier1.sinks = sink1

tier1.sources.source1.type = exec
tier1.sources.source1.command = /usr/bin/vmstat 1
tier1.sources.source1.channels = channel1

tier1.channels.channel1.type = memory
tier1.channels.channel1.capacity = 10000
tier1.channels.channel1.transactionCapacity = 1000

tier1.sinks.sink1.type = org.apache.flume.sink.kafka.KafkaSink
tier1.sinks.sink1.topic = sink1
tier1.sinks.sink1.brokerList = hadoop1:9092,hadoop2:9092,hadoop3:9092
tier1.sinks.sink1.channel = channel1
tier1.sinks.sink1.batchSize = 20
[root@hadoop1 conf]# cat flume_kafka.conf
tier1.sources = source1
tier1.channels = channel1
tier1.sinks = sink1

tier1.sources.source1.type = exec
tier1.sources.source1.command = /usr/bin/vmstat 1
tier1.sources.source1.channels = channel1

tier1.channels.channel1.type = memory
tier1.channels.channel1.capacity = 10000
tier1.channels.channel1.transactionCapacity = 1000

tier1.sinks.sink1.type = org.apache.flume.sink.kafka.KafkaSink
tier1.sinks.sink1.topic = sink1
tier1.sinks.sink1.brokerList = hadoop1:9092,hadoop2:9092,hadoop3:9092
tier1.sinks.sink1.channel = channel1
tier1.sinks.sink1.batchSize = 20

配置完成将flume采集到的数据流入kafka的flume_kafka.conf后按照如下命令启动
/usr/lib/flume-ng/bin/flume-ng agent --conf /etc/flume-ng/conf --conf-file /etc/flume-ng/conf/flume_kafka.conf --name tier1 -Dflume.root.logger=INFO,console
Kafka中的消息队列中的sink1是目标消息

配置参数文件kafka_flume.conf
内容如下:
tier2.sources = source1
tier2.channels = channel1
tier2.sinks = sink1

tier2.sources.source1.type = org.apache.flume.source.kafka.KafkaSource
tier2.sources.source1.kafka.bootstrap.servers = hadoop3:9092
tier2.sources.source1.kafka.topics = sink1
tier2.sources.source1.kafka.consumer.group.id = flume
tier2.sources.source1.channels = channel1
tier2.sources.source1.interceptors = i1
tier2.sources.source1.interceptors.i1.type = timestamp
tier2.sources.source1.kafka.consumer.timeout.ms = 100

tier2.channels.channel1.type = memory
tier2.channels.channel1.capacity = 10000
tier2.channels.channel1.transactionCapacity = 1000

tier2.sinks.sink1.type = hdfs
tier2.sinks.sink1.hdfs.path = /tmp/kafka/%{topic}/%y-%m-%d
tier2.sinks.sink1.hdfs.rollInterval = 5
tier2.sinks.sink1.hdfs.rollSize = 0
tier2.sinks.sink1.hdfs.rollCount = 0
tier2.sinks.sink1.hdfs.fileType = DataStream
tier2.sinks.sink1.channel = channel1

配置完成将kafka作为数据源将flume采集到的数据流入HDFS的kafka——flume.conf后按照如下命令启动
/usr/lib/flume-ng/bin/flume-ng agent --conf /etc/flume-ng/conf --conf-file /etc/flume-ng/conf/kafka_flume.conf --name tier2 -Dflume.root.logger=INFO,console
在HDFS下的/tmp/kafka/%{topic}/%y-%m-%d对应的消息变量值和相应时间段是输出文件位置
配置将kafka的数据流入SparkStreaming的测试用例
/root/spark-1.6.0-bin-hadoop2.6/bin/run-example streaming.KafkaWordCount hadoop1:2181,hadoop2:2181,hadoop3:2181 flume sink1
在HDFS上的/user/root/checkpoint/下是输出文件位置

你可能感兴趣的:(大数据,Sparkstreaming,flume,zookeeper,Kafka)