一、Kafka 简介
Kafka:高吞吐量的分布式消息系统,发布-订阅,分布式提交日志;
特点:快,可扩展性,稳定性,分布式;
Apache Kafka 是分布式发布-订阅消息系统。它最初由linkedin公司开发,之后成为Apache项目的一部分。Kafka是一种快速的、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。
Apache Kafka 与传统消息系统相比,有以下不同:
1)它被设计为一个分布式系统,易于向外扩展;
2)它同时为发布和订阅提供高吞吐量;
3)它支持多订阅者,当失败时能自动平衡消费者;
4)它将消息持久化到磁盘,因此可用于批量消费,例如 ETL,以及实时应用程序;
kafka 架构
1)生产者(producer)是能够发布消息到话题(topic)的任何对象;
2)已发布的消息保存在一组服务器中,它们被称为代理(Broker)或kafka集群;
3)消费者可以订阅一个或多个话题,并从Broker中拉取数据,从而消费这些已发布的消息;
4)话题(topic)是特定类型的消息流。消息是字节的有效负载(payload),话题是消息的分类名或种子(Feed)名。
5)kafka依赖于zookeeper;
二、kafka的安装
用scala语言编写的2个大数据框架:spark、kafka;
安装kafka集群步骤:
1)安装jdk;
2)安装zookeeper;
3)安装scala;
4)安装kafka;
kafka依赖于zookeeper;如果没有安装zookeeper,要先安装zookeeper;
安装zookeeper:
1)版本为 zookeeper-3.4.5-cdh5.3.6,解压到安装目录,安装目录是:/opt/cdh-5.3.6/zookeeper-3.4.5-cdh5.3.6;
2)在安装目录下,创建目录:data/zkData,用于存放数据;
3)把 conf/zoo_sample.cfg 文件名称修改为 zoo.cfg,修改 zoo.cfg 的内容:
dataDir=/opt/cdh-5.3.6/zookeeper-3.4.5-cdh5.3.6/data/zkData
zookeeper 安装完毕,启动 zookeeper
1)启动 zkServer
$ZOOKEEPER_HOME/bin/zkServer.sh start
2)进入zk客户端;
$ZOOKEEPER_HOME/bin/zkCli.sh
3)可以用命令查看zk中的节点和内容;查看根目录下的节点,只有zookeeper 一个节点;
[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper]
安装kafka步骤;
可以参考官网安装:http://kafka.apache.org/quickstart
1)官网下载,http://kafka.apache.org/downloads,由于是练习,用的版本比较老:kafka_2.10-0.8.2.1.tgz,依赖scala版本是 2.10;
2)解压到安装目录,安装目录是:/opt/cdh-5.3.6/kafka_2.10-0.8.2.1
3)替换kafka依赖的zookeeper包;
要使得 kafka 用我们安装的 zookeeper (版本为3.4.5),所以 kafka自带的zookeeper包应该删除,
rm -rf libs/zookeeper-3.4.6.jar
把 zookeeper-3.4.5-cdh5.3.6 安装目录下的依赖包 zookeeper-3.4.5-cdh5.3.6.jar 拷贝到kafka的libs目录下,作为kafka的依赖;
cp /opt/cdh-5.3.6/zookeeper-3.4.5-cdh5.3.6/zookeeper-3.4.5-cdh5.3.6.jar libs/
4)修改配置文件:config/server.properties
每一台broker都要有一个唯一的整型 id:
broker.id=0
端口号:
port=9092
主机名:
host.name=hadoop-senior.ibeifeng.com
日志,先创建目录:
mkdir -p kafka-logs
再修改:
log.dirs=/opt/cdh-5.3.6/kafka_2.10-0.8.2.1/kafka-logs
zk的连接:
zookeeper.connect=hadoop-senior.ibeifeng.com:2181
三、kafka的启动
1)启动zookeeper
$ZOOKEEPER_HOME/bin/zkServer.sh start
2)启动kafka
$KAFKA_HOME/bin/kafka-server-start.sh config/server.properties
在后台启动的命令为:
nohup $KAFKA_HOME/bin/kafka-server-start.sh config/server.properties &
3)查看jps进程,可以看到多个进程,其中 QuorumPeerMain 是zookeeper;
> jps
4144 Kafka
4123 QuorumPeerMain
4)查看zookeeper中的cli 客户端
$KAFKA_HOME/bin/zkCli.sh
查看根目录下的节点列表:
[zk: localhost:2181(CONNECTED) 1] ls /
[consumers, config, controller, admin, brokers, zookeeper, controller_epoch]
[zk: localhost:2181(CONNECTED) 2] ls /brokers
[topics, ids]
[zk: localhost:2181(CONNECTED) 3] ls /config
[topics, changes]
5)创建topic
bin/kafka-topics.sh --create --zookeeper hadoop-senior.ibeifeng.com:2181 --replication-factor 1 --partitions 1 --topic test
6)查看已有的topic,
bin/kafka-topics.sh --list --zookeeper hadoop-senior.ibeifeng.com:2181
在zk客户端查看
[zk: localhost:2181(CONNECTED) 7] ls /config/topics
[test]
7)生产数据
bin/kafka-console-producer.sh --broker-list hadoop-senior.ibeifeng.com:9092 --topic test
8)消费数据
bin/kafka-console-consumer.sh --zookeeper hadoop-senior.ibeifeng.com:2181 --topic test --from-beginning
9)在生产者控制台,输入字符串
> bin/kafka-console-producer.sh --broker-list hadoop-senior.ibeifeng.com:9092 --topic test
This is a message
This is another message
10)可以在消费者控制台,看到输出字符串
bin/kafka-console-consumer.sh --zookeeper hadoop-senior.ibeifeng.com:2181 --topic test --from-beginning
This is a message
This is another message