分布式消息系统 Kafka源码安装

来源:互联网 发布:gre单词书推荐 知乎 编辑:程序博客网 时间:2024/06/15 08:34

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 -versionjava 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 UTCRevision:     b762622a185d59ce0cfc9cbc6ab5dd22469e18a6Groovy:       2.4.10Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015JVM:          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命令执行过程截图
gradle执行结束后截图,现在一切都会奏效:
gradle执行结束

执行./gradlew jar截图

执行gradlew jar截图
./gradlew jar执行成功后截图:(执行时间蛮久的)
gradlew jar执行成功后截图
./gradlew srcJar执行成功后截图:
gradlew srcJar执行成功后截图
./gradlew aggregatedJavadoc 执行失败报错
No value has been specified for property ‘outputDirectory’
gradlew aggregatedJavadoc 执行失败
四、启动和停止
启动 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 -l1830 org.gradle.launcher.daemon.bootstrap.GradleDaemon5275 sun.tools.jps.Jps4367 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]# jps1830 GradleDaemon4203 Kafka5245 Jps4367 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 kafkaServerroot      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 zookeeperroot      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=0advertised.listeners=PLAINTEXT://192.168.1.163:9092num.network.threads=3num.io.threads=8socket.send.buffer.bytes=102400socket.receive.buffer.bytes=102400socket.request.max.bytes=104857600log.dirs=/tmp/kafka-logsnum.partitions=1num.recovery.threads.per.data.dir=1log.retention.hours=168log.segment.bytes=1073741824log.retention.check.interval.ms=300000zookeeper.connect=192.168.1.163:2181zookeeper.connection.timeout.ms=6000[root@kafka-test kafka-0.10.2.1-src]# egrep -v "^$|^#" config/zookeeper.properties dataDir=/tmp/zookeeperclientPort=2181maxClientCnxns=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: --zookeeperError: 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的工作图强调内容
kafka的工作图
producers通过网络将消息发送到Kafka集群,集群向消费者提供消息
kafka对消息进行归纳,即topic,也就是说producer发布topic,consumer订阅topic

0 0