Kafka部署:
目前Kafka的最新的源码包版本为2.2.1,二进制版本为2.12-2.2.1; 一般好多人都采用二进制部署,因为解压即用,快捷方便,再此也选择二进制安装,官方建议用二进制的2.12版本; Kafka官方下载地址:http://kafka.apache.org/downloads Kafka_2.12下载地址:http://mirror.bit.edu.cn/apache/kafka/2.2.1/kafka_2.12-2.2.1.tgz
下载安装包
解压安装包到/usr/local/
更改kafka目录名
export KAFKA_HOME= /usr/local/kafka
export PATH= \$PATH :\$KAFKA_HOME /bin
EOF
添加Kafaka环境变量
重新加载文件
ZooKeeper部署:
ZooKeeper官方站点:https://zookeeper.apache.org/ Kafka使用ZooKeeper来管理,因此需要安装ZooKeeper,并且要先启动ZooKeeper。 但是在Kafka中内置了ZooKeeper配置文件:/usr/local/kafka/config/zookeeper.properties,单机部署我们选择Kafka所提供的ZK配置文件来使用ZK,但是如果是集群环境的Kafka,建议使用单独的ZooKeeper来管理Kafka集群,以下我们选择使用Kafka内置的ZooKeeper来管理单节点的Kafka。
注意:
ZooKeeper需要允许Java环境,需要先部署JDK。 JDK下载链接:https://www.oracle.com/technetwork/java/javase/archive-139210.html
解压安装包到/usr/local/
export JAVA_HOME= /usr/local/jdk1.8.0_161
export JRE_HOME= \$JAVA_HOME /jre
export CLASSPATH= .:\$JAVA_HOME /lib/dt.jar:\$JAVA_HOME /lib/tools.jar:\$JRE_HOME /lib
export PATH= \$JAVA_HOME /bin:\$JRE_HOME /bin:\$PATH
EOF
添加Kafaka环境变量
重新加载文件
验证查看jdk版本号
修改Zookeeper配置文件与详解:
tickTime= 2000
initLimit= 10
syncLimit= 5
dataDir= /data/ZK
dataLogDir= /data/zk-logs
clientPort= 2181
maxClientCnxns= 60
autopurge.snapRetainCount= 3
autopurge.purgeInterval= 1
server.1= localhost:2888:3888
Kafka目录文件介绍:
Kafka根目录文件介绍:
total 52
drwxr-xr-x 3 root root 4096 May 14 00:18 bin
drwxr-xr-x 2 root root 4096 Jun 24 16:41 config
drwxr-xr-x 2 root root 215 Jun 23 00:56 kafka-logs
drwxr-xr-x 2 root root 4096 Jun 23 00:49 libs
-rw-rw-r-- 1 root root 32216 May 14 00:10 LICENSE
drwxr-xr-x 2 root root 182 Jun 23 00:51 logs
-rw-rw-r-- 1 root root 336 May 14 00:10 NOTICE
drwxr-xr-x 2 root root 44 May 14 00:18 site-docs
Kafka执行程序介绍:
total 132
-rwxrwxr-x 1 root root 945 May 13 16:10 kafka-console-consumer.sh
-rwxrwxr-x 1 root root 944 May 13 16:10 kafka-console-producer.sh
-rwxrwxr-x 1 root root 871 May 13 16:10 kafka-consumer-groups.sh
-rwxrwxr-x 1 root root 863 May 13 16:10 kafka-topics.sh
-rwxrwxr-x 1 root root 1393 May 13 16:10 zookeeper-server-start.sh
-rwxrwxr-x 1 root root 1001 May 13 16:10 zookeeper-server-stop.sh
修改Kafka主配置文件server.properties:
broker.id= 1
listeners= PLAINTEXT://172.17.0.2:9092
num.network.threads= 3
num.io.threads= 8
socket.send.buffer.bytes= 102400
socket.receive.buffer.bytes= 102400
socket.request.max.bytes= 104857600
log.dirs= /data/kafka-logs/
num.partitions= 1
num.recovery.threads.per.data.dir= 1
offsets.topic.replication.factor= 1
transaction.state.log.replication.factor= 1
transaction.state.log.min.isr= 1
log.retention.hours= 168
log.segment.bytes= 1073741824
log.retention.check.interval.ms= 300000
zookeeper.connect= 172.17.0.2:2181
zookeeper.connection.timeout.ms= 6000
group.initial.rebalance.delay.ms= 0
启动Zookeeper与Kafka:
查看进程以确保zk启动
LISTEN 0 50 *:2181 *:* users:(( "java" ,pid= 830,fd= 101))
查看进程连接
1858 QuorumPeerMain
2280 Jps
2201 Kafka
下面通过过滤端口号可以看到
ZooKeeper监控本地地址TCP端口2181,可以ZooKeeper看到2181后面对应的还有一个端口号为43354
Kafka监控本地地址TCP端口9092,可以看到Kafka9092后面也有对应的一个端口号55036
tcp 0 0 172.17.0.2:9092 0.0.0.0:* LISTEN 1041/java
tcp 0 0 0.0.0.0:2181 0.0.0.0:* LISTEN 700/java
tcp 0 0 172.17.0.2:2181 172.17.0.2:43354 ESTABLISHED 700/java
tcp 0 0 172.17.0.2:43354 172.17.0.2:2181 ESTABLISHED 1041/java
tcp 0 0 172.17.0.2:9092 172.17.0.2:55036 ESTABLISHED 1041/java
tcp 0 0 172.17.0.2:55036 172.17.0.2:9092 ESTABLISHED 1041/java
查看2181端口的监听状态
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 700 root 101u IPv4 23940 0t0 TCP *:eforward ( LISTEN)
java 700 root 103u IPv4 18120 0t0 TCP kafka_node1:eforward-> kafka_node1:43354 ( ESTABLISHED)
java 1041 root 101u IPv4 25680 0t0 TCP kafka_node1:43354-> kafka_node1:eforward ( ESTABLISHED)
查看9092的端口监听状态
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 1041 root 158u IPv4 24974 0t0 TCP kafka_node1:XmlIpcRegSvc ( LISTEN)
java 1041 root 174u IPv4 30888 0t0 TCP kafka_node1:55036-> kafka_node1:XmlIpcRegSvc ( ESTABLISHED)
java 1041 root 177u IPv4 29475 0t0 TCP kafka_node1:XmlIpcRegSvc-> kafka_node1:55036 ( ESTABLISHED)
管理Kafka:
接下来操作下Kafka,通过kafka-topics.sh新建一个Topic,然后使用kafka-console-producer.sh消息生产脚本来生产消息到Topic中,再由kafka-console-consumer.sh消息消费者消费消息,以及常用的选项介绍。 此处使用的Kafka版本为kafka_2.12-2.2.1.tgz,但是在Kafka的上一个版本中kafka_2.11-2.1.0.tgz,Kafka的命令配置发生了改变,以下我们把两个版本的命令都写出来:
新版本:2.12-2.2.1 老版本:2.11-2.1.0
创建Topic主题:
新版本:
老版本:
选项解释:
–create:创建新的Topic –bootstrap-server:指定要哪台Kafka服务器上创建Topic,主机加端口,指定的主机地址一定要和配置文件中的listeners一致 –zookeeper:指定要哪台zookeeper服务器上创建Topic,主机加端口,指定的主机地址一定要和配置文件中的listeners一致 –replication-factor:创建Topic中的每个分区(partition)中的复制因子数量,即为Topic的副本数量,建议和Broker节点数量一致,如果复制因子超出Broker节点将无法创建 –partitions:创建该Topic中的分区(partition)数量 –topic:指定Topic名称
区别:
–bootstrap-server:新版本为bootstrap-server,新版本把Topic创建到了Kafka中,也就意味着信息要被存储到Broker节点的Topic中 –zookeeper:老版本为zookeeper,老版本是把Topic创建到了zookeeper中,意味着信息要被存储到ZooKeeper应用的Topic中
总结:
我们的这个2.2.1版本这两种目前都支持,但是官方建议使用新版本的选项。
查看已创建的Topic:
新版本:
kafka_new_01
kafka_old_01
老版本:
kafka_new_01
kafka_old_01
区别:
使用不同的选项要指定不同的服务和端口
生产消息:
注意:
生产消息在新版本中未发生改变,同样是向Broker节点发送消息,这也证实了producer生产者无需和ZooKeeper节点产生连接,只需和Broker建立连接即可,如果了解更多kafka的架构及工作原理,请看该篇文章的架构图部分:文档:Kafka理论概述(一).note 以下向两个Topic中发送不同的消息,该消息内容为手动输入
生产kafka_new_01:
> Hello Kafka_new_01
> I'm the new version
生产kafka_old_01:
# /usr/local/kafka/bin/kafka-console-producer.sh --broker-list 172.17.0.2:9092 --topic kafka_old_01
>Hello Kafka_old_01
>I' m the old version
参数解释:
--broker-list:指定使用哪台broker来生产消息
--topic:指定要往哪个Topic中生产消息
消费消息:
消费Kafka_new_01:
kafka_new_01 --from-beginning
Hello Kafka_new_01
I'm the new version
消费Kafka_old_01:
# /usr/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server 172.17.0.2:9092 --topic
kafka_old_01 --from-beginning
Hello Kafka_old_01
I' m the old version
参数解释:
--bootstrap-server:指定要在哪台broker节点消费消息,指明IP和端口。
--topic:指定要在哪个Topic中消费消息。
--from-beginning:获取所有未被消费的信息
查看Topic详情:
新版本命令:
Topic:kafka_new_01 PartitionCount:1 ReplicationFactor:1 Configs:segment.bytes= 1073741824
Topic: kafka_new_01 Partition: 0 Leader: 1 Replicas: 1 Isr: 1
老版本命令:
Topic:kafka_new_01 PartitionCount:1 ReplicationFactor:1 Configs:
Topic: kafka_new_01 Partition: 0 Leader: 1 Replicas: 1 Isr: 1
参数解释:
--Topic:kafka_new_01:topic名称
--PartitionCount:1:分片数量
--ReplicationFactor:1:Topic副本数量
删除Topic:
使用--bootstrap-server删除
使用--zookeeper删除
Topic kafka_old_01 is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.
虽然有提示说"kafka_old_01" 只是标记被删除,但是没关系
__consumer_offsets
查看已创建Topic,我们创建的两个Topic已经被删除掉了,但是Kafka自动生成了一个叫__consumer_offsets的Topic。