一、java环境的配置
1.登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
下载并安装jdk1.8,在usr目录下建立java安装目录,解压
tar -zxvf jdk-8u152-linux-x64.tar.gz
mkdir /usr/local/java
mv jdk1.8.0_152/ /usr/local/java/
2.编辑配置文件,配置系统环境变量
vi /etc/environment
在文本的末尾添加如下内容(pwd 可以显示当前目录)
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
export JAVA_HOME=/usr/local/java/jdk1.8.0_152
export JRE_HOME=/usr/local/java/jdk1.8.0_152/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
配置用户环境变量
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
export JAVA_HOME=/usr/local/java/jdk1.8.0_152
export JRE_HOME=/usr/local/java/jdk1.8.0_152/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
3.查看安装情况
java -version
二、下载kafka
2.1解压安装包
2.2配置kafka(/usr/local/kafka/kafka_2.11-2.3.1/config pwd可查看路径)server.properties
创建kafka日志目录 mkdir /usr/local/kafka/log/kafka
进入配置目录 cd /usr/local/kafka/kafka_2.11-2.3.1/config
vi server.properties #编辑修改相应的参数 如下:(详见 http://blog.csdn.net/lizhitao/article/details/25667831)
broker.id=0
#删除 topic 功能使能
delete.topic.enable=true
port=9092 #kafka端口号
host.name=192.168.1.114 #服务器IP地址
log.dirs=/usr/local/kafka/log/kafka #日志存放路径,上面创建的目录
zookeeper.connect=192.168.1.114:2181 #zookeeper地址和端口,单机配置部署,localhost:2181
2.3配置Zookeeper
创建Zookeeper目录 mkdir /usr/local/kafka/zookeeper
创建Zookeeper日志目录 mkdir /usr/local/kafka/log/zookeeper
进入配置目录 cd /usr/local/kafka/kafka_2.11-2.3.1/config
vi zookeeper.properties 编辑配置参数如下:
dataDir=/usr/local/kafka/zookeeper
dataLogDir=/usr/local/kafka/log/zookeeper
# the port at which the clients will connect
#clientPort=2181
# disable the per-ip limit on the number of connections since this is a non-production config
#maxClientCnxns=0
clientPort=2181
maxClientCnxns=100
tickTime=2000
initLimit=10
syncLimit=5
2.4创建启动关闭kafka的脚本
cd /usr/local/kafka
创建启动脚本
vi kafkastart.sh #编辑,添加以下代码
#启动zookeeper
/usr/local/kafka/kafka_2.11-2.3.1/bin/zookeeper-server-start.sh /usr/local/kafka/kafka_2.11-2.3.1/config/zookeeper.properties &
sleep 3
#等3秒后执行
#启动kafka
/usr/local/kafka/kafka_2.11-2.3.1/bin/kafka-server-start.sh /usr/local/kafka/kafka_2.11-2.3.1/config/server.properties &
创建关闭脚本
#关闭
/usr/local/kafka/kafka_2.11-2.3.1/bin/zookeeper-server-stop.sh /usr/local/kafka/kafka_2.11-2.3.1/config/zookeeper.properties &
sleep 3
#等3秒后执行
#关闭kafka
/usr/local/kafka/kafka_2.11-2.3.1/bin/kafka-server-stop.sh /usr/local/kafka/kafka_2.11-2.3.1/config/server.properties &
添加脚本执行权限(777)
chmod +x kafkastart.sh
chmod +x kafkastop.sh
三、kafka样例测试(单节点-单代理配置)
1.创建kafka的topic1.创建Topic(2181 是zookeeper 端口)
运行命令: ./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test1(主题)
选项说明:
--topic 定义 topic 名 test1
--replication-factor 定义副本数 1
--partitions 定义分区数 1
2.查看当前服务器中的所有 topic
bin/kafka-topics.sh --zookeeper localhost:2181 --list
3.删除 topic(需要 server.properties 中设置 delete.topic.enable=true 否则只是标记删除。)
bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic test1cd ..
4.启动生产者发送消息(新建消息)
bin/kafka-conbinsole-producer.sh --broker-list localhost:9092 --topic test1
>hello world(输入内容)
5.启动消费者以接收消息
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic first
--from-beginning:会把主题中以往所有的数据都读取出来。9092是kafka单机启动的端口
如果想实时显示的话则去掉后面的 --from-beginning
四、kafka样例测试(单节点-多代理配置)
kafka单机模型指的是只在一台服务器上部署一个kafka实例(broker)。首先进入配置文件目录下编写broker配置文件。kafka解压包中的config目录下已经有了一份现成的broker配置文件server.properties,我们将其中的部分内容进行修改已达到自己想要的状态,在实际的生产过程中,对kafka的应用一般不会只使用一台服务器,都是通过多台服务器搭建kafka集群环境,这样才能体现出kafka的易扩展性、高吞吐量和安全性。由于只有一个PC机,没有集群环境,所以我么可以搭建一个kafka伪集群模型来模拟kafka集群模型。
kafka启动命令中需要携带broker配置文件作为参数,而broker也就代表着kafka集群中的每台服务器,所以我们要模拟一个有N台服务器的kafka集群,就需要编写N个broker配置文件。由于是在一个机器上模拟多台broker,所以每个broker的host.name 均相同,但port一定不能一样,否则就会后面启动的broker就会因为端口占用而不会正确启动。
config中vim编辑server-one.properties(三个地方不能相同 broker.id port log.dirs)
broker.id=1
#删除 topic 功能使能
delete.topic.enable=true
port=9093
host.name=192.168.1.114
#delete.topic.enable=true
#listeners=PLAINTEXT:0.0.0.0:9092 #可以不用配置,默认本机
#advertised.listeners=PLAINTEXT:192.168.1.248:9092
log.dirs=/usr/local/kafka/log/kafka-1
zookeeper.connect=192.168.1.114:2181
在Zookeeper启动的前提下启动两个broker
bin/kafka-server-start.sh config/server-one.properties
在伪集群中创建新的topic:wule,并设置partitions为2,replication-factor为2,命令如下:
bin/kafka-topics.sh --create --zookeeper 192.168.1.114:2181 --replication-factor 2 -partitions 1 --topic test2
输出 Created topic test2.
Describe 命令用于检查哪个代理正在侦听当前创建的主题,如下所示
启动生产者发送消息:
bin/kafka-console-producer.sh --broker-list 192.168.1.114:9092 --topic test2
启动消费者消费消息
bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.114:9092 --from-beginning --topic test2
补充:
1.创建Topic(2181 是zookeeper 端口)
运行命令: ./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test1
选项说明:
--topic 定义 topic 名 test1
--replication-factor 定义副本数 1
--partitions 定义分区数 1
2.查看当前服务器中的所有 topic
bin/kafka-topics.sh --zookeeper localhost:2181 --list
3.删除 topic(需要 server.properties 中设置 delete.topic.enable=true 否则只是标记删除。)
bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic test1cd ..
4.发送消息(新建消息)
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test1
>hello world(输入内容)
5.消费消息
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test1
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic first
bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.114:9092 --from-beginning --topic first
--from-beginning:会把主题中以往所有的数据都读取出来。9092是kafka单机启动的端口
6.查看某个 Topic 的详情
bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic first
7.修改分区数
bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic first --partitions 6
==========================================================
1.Producer :消息生产者,就是向 kafka broker 发消息的客户端;
2.Consumer :消息消费者,向 kafka broker 取消息的客户端;
3.Consumer Group (CG ):消费者组,由多个 consumer 组成。 消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个 组内 消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即 消费者组是逻辑上的一个订阅者。
4.Broker :一台 kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker可以容纳多个 topic。
5.Topic :可以理解为一个队列, 生产者和消费者面向的都是一个 topic
6.Partition :为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上,一个 topic 可以分为多个partition,每个 partition 是一个有序的队列;
7.Replica:副本,为保证集群中的某个节点发生故障时,该节点上的 partition 数据不丢失,且 kafka 仍然能够继续工作,kafka 提供了副本机制,一个 topic 的每个分区都有若干个副本,一个 leader 和若干个 follower。
8 leader :每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是 leader。
9 follower :每个分区多个副本中的“从”,实时从 leader 中同步数据,保持和 leader 数据的同步。leader 发生故障时,某个 follower 会成为新的 follower。