一、单服务器Centos环境下Kafka (zookeeper)的安装搭建和基本使用
1. Kafka版本:2.0.0的下载安装
安装前的基本环境检查和准备,我这里的服务器系统是CentOS release 6.8 (Final),准备安装Kafka版本:2.0.0,因为kafka需要运行java环境,看了一下我服务器上已经装过了jdk,如果没有安装JDK,直接使用yum安装即可。publish:October 18, 2018 -Thursday 如下:
[root@123 download]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
You have new mail in /var/spool/mail/root
#如果没装过,搜索一下jdk的yum源
[root@123 download]# yum search java | grep jdk
ldapjdk-javadoc.x86_64 : Javadoc for ldapjdk
java-1.6.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.6.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.6.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.6.0-openjdk-javadoc.x86_64 : OpenJDK API Documentation
java-1.6.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.7.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.7.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.7.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.7.0-openjdk-javadoc.noarch : OpenJDK API Documentation
java-1.7.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.8.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.8.0-openjdk-debug.x86_64 : OpenJDK Runtime Environment with full debug on
java-1.8.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.8.0-openjdk-demo-debug.x86_64 : OpenJDK Demos with full debug on
java-1.8.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.8.0-openjdk-devel-debug.x86_64 : OpenJDK Development Environment with
java-1.8.0-openjdk-headless.x86_64 : OpenJDK Runtime Environment
java-1.8.0-openjdk-headless-debug.x86_64 : OpenJDK Runtime Environment with full
java-1.8.0-openjdk-javadoc.noarch : OpenJDK API Documentation
java-1.8.0-openjdk-javadoc-debug.noarch : OpenJDK API Documentation for packages
java-1.8.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.8.0-openjdk-src-debug.x86_64 : OpenJDK Source Bundle for packages with
ldapjdk.x86_64 : The Mozilla LDAP Java SDK
#执行yum 安装JDK.
[root@123 download]# yum install java-1.8.0-openjdk
kafaka的官网地址:http://kafka.apache.org/downloads.html 自己选择版本下载,我这里使用的是kafka-2.0.0-src.tgz。下面进行下载kafka安装:
[root@123 download]# cd /opt/download/
[root@123 download]# mwget http://mirrors.hust.edu.cn/apache/kafka/2.0.0/kafka_2.11-2.0.0.tgz
Begin to download: kafka_2.11-2.0.0.tgz
FileSize: 53M
100% [===================] [ 53M] [163K/s] [ETA:00:00]Download successfully in 01:35 M:S
[root@123 download]# tar zxvf kafka_2.11-2.0.0.tgz -C /opt/modules/
[root@123 modules]# cd /opt/modules/kafka_2.11-2.0.0/
[root@123 kafka_2.11-2.0.0]# ll
total 52
drwxr-xr-x 3 root root 4096 Jul 24 22:19 bin
drwxr-xr-x 2 root root 4096 Jul 24 22:19 config
drwxr-xr-x 2 root root 4096 Oct 18 10:49 libs
-rw-r--r-- 1 root root 28824 Jul 24 22:17 LICENSE
-rw-r--r-- 1 root root 336 Jul 24 22:17 NOTICE
drwxr-xr-x 2 root root 4096 Jul 24 22:19 site-docs
kafka压缩包里的文件夹内容和功能一目了然,bin存放kafka的可执行脚本,config配置目录,libs依赖库目录。另外kafka是使用zookeeper来实现动态的集群扩展,不需要更改客户端(producer和consumer)的配置。broker会在zookeeper注册并保持相关的元数据(topic,partition信息等)更新。客户端会在zookeeper上注册相关的watcher。一旦zookeeper发生变化,客户端能及时感知并作出相应调整。这样就保证了添加或去除broker时,各broker间仍能自动实现负载均衡。这里的客户端指的是Kafka的消息生产端(Producer)和消息消费端(Consumer),有点像你用php连接多台mysql从时中间使用的proxy一样,后端mysql变化时不用修改php,只需要修改proxy。可以看到bin目录下有zookeeper的启动程序,因此接下来要对zookeeper和kafka进行配置。
2. 配置zookeeper和kafka
关于zookeeper,Kafka中已经自带zookeeper,无需去另外下载安装,只需要编辑config/zookeeper.properties的配置文件直接启动即可。关于kafka配置,进入kafka目录下config文件夹里,编辑server.properties文件。kafka的server端最重要三个配置为:broker.id,log.dir,zookeeper.connect,在配置文件config/server.properties中各参数有详细说明。
配置好后,最后是运行kafka,启动kafka之前要先启动zookeeper,不然启动kafka会进行多次尝试连接zookeeper失败后关闭。ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection while in state: CONNECTING
#启动zookeeper,可看一下配置zookeeper.properties,这里使用默认即可
[root@123 config]# cd ../
[root@123 kafka_2.11-2.0.0]# bin/zookeeper-server-start.sh config/zookeeper.properties &
#启动kafka
[root@123 kafka_2.11-2.0.0]# bin/kafka-server-start.sh config/server.properties &
但这时报错:/opt/modules/kafka_2.11-2.0.0/bin/kafka-run-class.sh: line 306: exec: java: not found。就在想这是什么问题,开始怀疑是java的path配置文件,就去查看/etc/profile 没有发现什么路径问题,那这报错是明显是程序里找不到java.于是执行下面的命令,然后就成功启动了kafka了。如下:
[root@123 bin]# which java
/opt/modules/java/jdk/jdk1.8.0_171/bin/java
[root@123 bin]# sudo ln -s /opt/modules/java/jdk/jdk1.8.0_171/bin/java /usr/bin/java
[root@123 kafka_2.11-2.0.0]# bin/kafka-server-start.sh config/server.properties &
....
[2018-10-18 12:06:26,175] INFO [SocketServer brokerId=0] Started processors for 1 acceptors (kafka.network.SocketServer)
[2018-10-18 12:06:26,178] INFO Kafka version : 2.0.0 (org.apache.kafka.common.utils.AppInfoParser)
[2018-10-18 12:06:26,180] INFO Kafka commitId : 3402a8361b734732 (org.apache.kafka.common.utils.AppInfoParser)
[2018-10-18 12:06:26,184] INFO [KafkaServer id=0] started (kafka.server.KafkaServer)
3. kafka的简单运用实践
现在开始简单运用一下kafka,在此之前记录一下kafka的基本词语:
producer:生产者
consumer:消费者
#上面这两个名词和其它的队列一样。下面的这名词它得整了一个新东东,实际和beanstalkd里面的tube以及rabbitmq里面的queue等差不多,就当一个消息分类。
topic: 消息以topic为类别记录,Kafka将消息种子(Feed)分门别类,每一类的消息称之为一个主题(Topic)。
broker:以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个broker;消费者可以订阅一个或多个主题(topic),并从Broker拉数据,从而消费这些已发布的消息。每个消息(也叫作record记录,也被称为消息)是由一个key,一个value和时间戳构成。
最后创建一个队列主题topic:kermitMQ,并使用list选项显示当前的topic,然后启动生产者和消费者在终端进行message进行生产(输入)和消费(输出)。
[root@123 bin]# ./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic kermitMQ
Created topic "kermitMQ".
[root@123 bin]# ./kafka-topics.sh --list --zookeeper localhost:2181
kermitMQ
[root@123 bin]#
#启动生产者
[root@123 bin]# ./kafka-console-producer.sh --broker-list localhost:9092 --topic kermitMQ
#在另一个窗口启动消费者,但提示zookeeper是一个不可识别的选项。如下:
[root@123 bin]# ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic kermitMQ --from-beginning
zookeeper is not a recognized option
#是因为kafka的版本问题,新版本不再使用--zookeeper,而使用--bootstrap-server
[root@123 bin]# ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic kermitMQ --from-beginning
在启动消费者,kafka有版本差异问题,新版本不再使用--zookeeper,而使用--bootstrap-server,所以新版本里如果使用--zookeeper会提示zookeeper是一个不可识别的选项。zookeeper is not a recognized option生产者和消费者都启动之后,在生产者界面输入任何内容后在消费者端就能出现生产者端输入的内容。这样kafka的简易环境就算搭建完成了。
版权归原作者 林戈的IT生涯 所有, 如有侵权,请联系我们删除。