Kafaka是Apache的一个项目,是一款分布式消息发布和订阅的系统,具有高性能和高吞吐率。(官网地址)
我们认为流媒体平台有三个关键功能:
1、它允许您发布和订阅记录流。 在这方面,它类似于消息队列或企业消息系统。
2、它允许您以容错方式存储记录流。
3、当记录流产生时,它允许让您处理记录流。
那么本章安装的 kafka能做什么呢?
它被用于两大类应用程序:
1、构建可在系统或应用程序之间可靠获取数据的实时流数据流水线
2、构建对数据流进行变换或反应的实时流应用程序
安装步骤
安装kafka前,我已经准备了一个名为kafka-test的Centos6.8 4核4G的测试云主机。
kafka安装前,有两个依赖需要安装:gradle2.0版本及以上,java7 或 java8
一、安装jdk8最新版
可以到官网下载,我kafka-test测试机上安装的是jdk1.8.0_60,
直接jdk压缩包解压到/usr/local/java/,
[root@kafka-test ~]# ls /usr/local/java/
bin COPYRIGHT db include javafx-src.zip jre lib LICENSE man README.html release src.zip THIRDPARTYLICENSEREADME-JAVAFX.txt THIRDPARTYLICENSEREADME.txt
然后将java目录加入环境变量:
[root@kafka-test ~]# echo "export JAVA_HOME=/usr/local/java" >> /etc/profile
[root@kafka-test ~]# echo "export PATH=$JAVA_HOME/bin:$PATH" >> /etc/profile
[root@kafka-test ~]# . /etc/profile
检测jdk是否安装配置成功:
[root@kafka-test ~]# java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
二、Gradle是一个基于JVM的构建工具,[gradle官网说明],(https://gradle.org/install)安装最新版 gradle(gradle也依赖java):
[root@kafka-test ~]# cd /usr/local/src/
[root@kafka-test ~]#wget https://downloads.gradle.org/distributions/gradle-3.5-all.zip
[root@kafka-test gradle-3.5]# mkdir /usr/local/gradle
[root@kafka-test src]# unzip -d /usr/local/gradle gradle-3.5-all.zip
[root@kafka-test src]# ls /usr/local/gradle/gradle-3.5/
bin docs getting-started.html init.d lib LICENSE media NOTICE samples src
配置系统环境变量
[root@kafka-test src]# echo "export PATH=$PATH:/usr/local/gradle/gradle-3.5/bin" >> /etc/profile
[root@kafka-test src]# . /etc/profile
检测gradle安装配置是否成功:
[root@kafka-test src]# gradle -v
------------------------------------------------------------
Gradle 3.5
------------------------------------------------------------
Build time: 2017-04-10 13:37:25 UTC
Revision: b762622a185d59ce0cfc9cbc6ab5dd22469e18a6
Groovy: 2.4.10
Ant: Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM: 1.8.0_60 (Oracle Corporation 25.60-b23)
OS: Linux 2.6.32-642.el6.x86_64 amd64
至此,kafka 环境依赖已经安装好,下面安装开始安装kafka,本文采用源码安装,也可以使用二进制包安装。
三、下载kafka最新稳定版
源码包:
wget http://mirrors.hust.edu.cn/apache/kafka/0.10.2.1/kafka-0.10.2.1-src.tgz
二进制安装包:
wget http://mirrors.hust.edu.cn/apache/kafka/0.10.2.1/kafka_2.12-0.10.2.1.tgz
[root@kafka-test ~]# cd /usr/local/src/
[root@kafka-test src]# wget http://mirrors.hust.edu.cn/apache/kafka/0.10.2.1/kafka-0.10.2.1-src.tgz
[root@kafka-test src]# tar zxf kafka-0.10.2.1-src.tgz
### First bootstrap and download the wrapper ###
[root@kafka-test src]# cd kafka-0.10.2.1-src
# gradle命令执行过程会从maven中央仓库下载很多jar等文件用于构建
[root@kafka-test src]# gradle
### Building a jar and running it ###
# 此过程也会从maven中央仓库下载很多jar等文件用于构建
[root@kafka-test kafka-0.10.2.1-src]# ./gradlew jar
### Building source jar ###
[root@kafka-test kafka-0.10.2.1-src]# ./gradlew srcJar
### Building aggregated javadoc ###
[root@kafka-test kafka-0.10.2.1-src]# ./gradlew aggregatedJavadoc
gradle执行结束后截图,现在一切都会奏效:
执行./gradlew jar截图
./gradlew jar执行成功后截图:(执行时间蛮久的)
./gradlew srcJar执行成功后截图:
./gradlew aggregatedJavadoc 执行失败报错
No value has been specified for property ‘outputDirectory’
四、启动和停止
启动 Zookeeper server,后台执行
[root@kafka-test kafka-0.10.2.1-src]# bin/zookeeper-server-start.sh config/zookeeper.properties &
查看进程:
# jps显示当前用户所有java进程的pid
[root@kafka-test kafka-0.10.2.1-src]# jps -l
1830 org.gradle.launcher.daemon.bootstrap.GradleDaemon
5275 sun.tools.jps.Jps
4367 org.apache.zookeeper.server.quorum.QuorumPeerMain
启动 Kafka server,后台运行
[root@kafka-test kafka-0.10.2.1-src]# bin/kafka-server-start.sh config/server.properties &
查看进程:
# jps显示当前用户所有java进程的pid
[root@kafka-test kafka-0.10.2.1-src]# jps
1830 GradleDaemon
4203 Kafka
5245 Jps
4367 QuorumPeerMain
停止Kafka server 和 Zookeeper server:
[root@kafka-test kafka-0.10.2.1-src]# bin/kafka-server-stop.sh
[root@kafka-test kafka-0.10.2.1-src]# ps -ef|grep kafkaServer
root 2676 1483 0 15:26 pts/1 00:00:00 grep kafkaServer
[root@kafka-test kafka-0.10.2.1-src]# bin/zookeeper-server-stop.sh
[root@kafka-test kafka-0.10.2.1-src]# ps -ef|grep zookeeper
root 2689 1483 0 15:26 pts/1 00:00:00 grep zookeeper
五、单机连通性测试
开启 zookeeper server 和 kafka server
Kafka提供了一个生产消息的命令行的工具,运行producer(生产者):
[root@kafka-test kafka-0.10.2.1-src]# bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
Kafka提供了一个消费消息的命令行的工具,运行consumer(消费者):
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
在producer端输入字符串并回车,查看consumer端是否显示。
图中,producer端输入字符串,在consumer端能正常显示。而consumer端输入的内容,在producer端是显示不了的。
六、修改zookeeper和kafka server的配置文件
[root@kafka-test kafka-0.10.2.1-src]# egrep -v "^$|^#" config/server.properties
broker.id=0
advertised.listeners=PLAINTEXT://192.168.1.163: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=/tmp/kafka-logs
num.partitions=1
num.recovery.threads.per.data.dir=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=192.168.1.163:2181
zookeeper.connection.timeout.ms=6000
[root@kafka-test kafka-0.10.2.1-src]# egrep -v "^$|^#" config/zookeeper.properties
dataDir=/tmp/zookeeper
clientPort=2181
maxClientCnxns=0
七、分布式连通性测试
Zookeeper Server, Kafka Server, Producer都放在kafka测试服务器上,ip地址为192.168.1.163
Consumer放在服务器vm02上,同时在server上也可放Consumer,ip地址为192.168.1.212 。
在这里有点需要强调下,我直接使用源码包解压到vm02服务器上,导致使用消费者命令行工具的时候一直报错,而且网上也找不到相关资料:
[root@vm02 kafka-0.10.2.1-src]# bin/kafka-console-consumer.sh --zookeeper 192.168.1.163:2181 --topic test
Unrecognized option: --zookeeper
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
后来尝试直接复制整个修改过配置文件后服务端的kafka目录到vm02服务器上,此时使用消费者命令行工具正常。
[root@kafka-test ~]# cd /usr/local/src/
[root@kafka-test src]# scp -r kafka-0.10.2.1-src 192.168.1.212:/usr/local/src/
Consumer在vm02服务器上:
[root@vm02 kafka-0.10.2.1-src]# bin/kafka-console-consumer.sh --zookeeper 192.168.1.163:2181 --topic test --from-beginning
至此使用源码安装最新版kafka成功。
另有kafka集群有空后再补上。
———-以下引用自网上
kafka是什么?
记住几个关键点,分布式、高吞吐量 的 订阅、发布 消息系统
kafka有什么?
producer 消息的生成者,即发布消息
consumer 消息的消费者,即订阅消息
broker Kafka以集群的方式运行,可以由一个或多个服务组成,服务即broker
zookeeper 协调转发
kafka的工作图强调内容
producers通过网络将消息发送到Kafka集群,集群向消费者提供消息
kafka对消息进行归纳,即topic,也就是说producer发布topic,consumer订阅topic