zookeeper与卡夫卡集群搭建
首先这片博客没有任何理论性的东西,只是详细说明kafka与zookeeper集群的搭建过程,需要三台linux服务器。
- java环境变量设置
- zookeeper集群搭建
- kafka集群搭建
java环境变量设置
在每台服务器上都有设置java环境变量
这里使用java源码安装的方式:
下载源码包解压,放入到/usr/local/文件夹下,修改名目录名字为jdk!接下就是把java的命令参数加入到linux的环境变量中。
[root@test3 jdk]# cat /etc/profile.d/java.sh
JAVA_HOME=/usr/local/jdk
JAVA_BIN=/usr/local/jdk/bin
JRE_HOME=/usr/local/jdk/jre
PATH=$PATH:/usr/local/jdk/bin:/usr/local/jdk/jre/bin
CLASSPATH=/usr/local/jdk/jre/lib:/usr/local/jdk/lib:/usr/local/jdk/jre/lib/charsets.jar
[root@test3 jdk]# #然后执行source命令,加载新加入的java.sh脚本!
[root@test3 bin]# source /etc/profile.d/java.sh #验证java环境变量是否设置成功
[root@test3 bin]# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
[root@test3 bin]# echo $JAVA_HOME #查看JAVA_HOME变量是否是上面设置的路径
/usr/local/jdk/jdk
[root@test3 bin]#
若是以上均反馈正常,则说明java环境已经设置完毕!
zookeeper集群搭建
zookeeper集群被称为群组。zookeeper使用的是一致性协议,所以建议每个群组里应该包含奇数个节点,因为只有当群组中大多数节点处于可用状态,zookeeper才能处理外部请求。也就是说,如果一个包含3个节点的群组,那么它允许一个节点失效。如果包含5个节点,那么它允许2个节点失效。【不建议zookeeper群组超过7个节点,因为zookeeper使用了一致性协议,节点过多会降低群组的性能】
群组中的每个服务器需要在数据目录中创建一个myid文件,用于指明自己的ID。
这里zookeeper采用源码的方式安装:
[root@test3 src]# tar zxvf zookeeper-3.4..tar.gz -C ../ #解压
[root@test3 src]# cd ../
[root@test2 local]# mv zookeeper-3.4. zookeeper #修改名字
[root@test3 local]# cd zookeeper
[root@test3 zookeeper]# ls
bin CHANGES.txt contrib docs ivy.xml LICENSE.txt README_packaging.txt recipes zookeeper-3.4..jar zookeeper-3.4..jar.md5 zookeeper.out
build.xml conf dist-maven ivysettings.xml lib NOTICE.txt README.txt src zookeeper-3.4..jar.asc zookeeper-3.4..jar.sha1
[root@test3 zookeeper]# mkdir -p /data/zookeeper/data #创建数据目录
[root@test3 zookeeper]# mkdir -p /data/zookeeper/logs #创建日志文件目录
[root@test1 zookeeper]# cd conf
[root@test1 conf]# ls
configuration.xsl log4j.properties zoo_sample.cfg
[root@test1 conf]# mv zoo_sample.cfg zoo.cfg #修改配置文件的名字,建议把原来的配置文件做备份
zookeeper的配置文件如下:
# The number of milliseconds of each tick
tickTime=2000 #单位为毫秒
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
#表示用于在从节点与主节点之间建立初始化连接的上限。
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
#表示允许从节点与主节点处于不同步转台的时间上限。
#initLimit与syncLimit这两个值都是tickTime的倍数,表示的时间是tickTime乘以这两个数值的值。
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/data/zookeeper/data #指定数据目录文件
dataLogDir=/data/zookeeper/logs #指定日志目录文件
# the port at which the clients will connect
clientPort=2181 #zookeeper监听的端口
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=
# Purge task interval in hours
# Set to "" to disable auto purge feature
#autopurge.purgeInterval=1 #zookeeper的群组设置
server.=10.0.102.179::
server.=10.0.102.204::
server.=10.0.102.214::3888 #群组设置的格式为: server.X=hostname:peerPort:leader:Port
X:服务器的ID,必须是一个整数,不过不一定要从0开始,也不要求是连续的。
peerPort:用于节点间通信的TCP端口。
leaderPort:用于leader选举的TCP端口。
客户端只需要通过clientport就能连接到群组,而群组节点间的通信则需要同时用到这三个端口。
【上面的操作,只是修改了配置文件,创建了数据目录和日志文件目录,还有就是解压了源码包!
下面要做的就是把上面操作在另外两台机器上做一遍,也可以把上面的文件直接通过scp命令复制到其余两台机器对应的位置上。】
同MySQL集群一样,集群每台服务器都需要一个唯一的标识,zookeeper也一样,需要一个myid文件,来标识每一台服务器!
[root@test1 data]# pwd
/data/zookeeper/data
[root@test1 data]# cat myid
1 #在每台集群的数据文件目录下面创建myid文件,每个文件中写入一个整数,这个整数用来指明当前服务器的ID。
#这个ID应该是需要和上面配置文件中的那个server.X中的X一致的。【遇到过不一致的情况,但是启动失败,修改为一致,就启动成功】
另外两台的myid文件如下:
[root@test2 data]# pwd
/data/zookeeper/data
[root@test2 data]# cat myid [root@test3 data]# pwd
/data/zookeeper/data
[root@test3 data]# cat myid
3
然后启动zookeeper集群:
#三台服务器都这样启动,会在当前目录执行路径下面生成nohup.out文件,若是报错的话,可以查看文件内容!
[root@test3 bin]# pwd
/usr/local/zookeeper/bin
[root@test3 bin]# ./zkServer.sh start
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED #需要注意的是,启动完成之后一定要查看是否有进程,有些时候不会报错,但是没有启动成功!
[root@test3 bin]# netstat -alntp | grep 2181 #查看监听端口是否存在
tcp 0 0 :::2181 :::* LISTEN 27962/java
三台服务器全部启动完成之后,进行如下验证:
[root@test3 bin]# ./zkCli.sh --server10.0.102.
Connecting to localhost:
-- ::, [myid:] - INFO [main:Environment@] - Client environment:zookeeper.version=3.4.-, built on // : GMT
-- ::, [myid:] - INFO [main:Environment@] - Client environment:host.name=test3
-- ::, [myid:] - INFO [main:Environment@] - Client environment:java.version=1.7.0_79
-- ::, [myid:] - INFO [main:Environment@] - Client environment:java.vendor=Oracle Corporation
-- ::, [myid:] - INFO [main:Environment@] - Client environment:java.home=/usr/local/jdk/jdk1..0_79/jre
2018-12-21 10:54:38,291 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/usr/local/zookeeper/bin/../build/classes:/usr/local/zookeeper/bin/../build/lib/*.jar:/usr/local/zookeeper/bin/../lib/slf4j-log4j12-1.6.1.jar:/usr/local/zookeeper/bin/../lib/slf4j-api-1.6.1.jar:/usr/local/zookeeper/bin/../lib/netty-3.7.0.Final.jar:/usr/local/zookeeper/bin/../lib/log4j-1.2.16.jar:/usr/local/zookeeper/bin/../lib/jline-0.9.94.jar:/usr/local/zookeeper/bin/../zookeeper-3.4.6.jar:/usr/local/zookeeper/bin/../src/java/lib/*.jar:/usr/local/zookeeper/bin/../conf: -- ::, [myid:] - INFO [main:Environment@] - Client environment:java.library.path=/usr/local/mysql/lib:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
-- ::, [myid:] - INFO [main:Environment@] - Client environment:java.io.tmpdir=/tmp
-- ::, [myid:] - INFO [main:Environment@] - Client environment:java.compiler=<NA>
-- ::, [myid:] - INFO [main:Environment@] - Client environment:os.name=Linux
-- ::, [myid:] - INFO [main:Environment@] - Client environment:os.arch=amd64
-- ::, [myid:] - INFO [main:Environment@] - Client environment:os.version=2.6.-.el6.x86_64
-- ::, [myid:] - INFO [main:Environment@] - Client environment:user.name=root
-- ::, [myid:] - INFO [main:Environment@] - Client environment:user.home=/root
-- ::, [myid:] - INFO [main:Environment@] - Client environment:user.dir=/usr/local/zookeeper/bin
-- ::, [myid:] - INFO [main:ZooKeeper@] - Initiating client connection, connectString=localhost: sessionTimeout= watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@1280d11b
Welcome to ZooKeeper!
-- ::, [myid:] - INFO [main-SendThread(localhost:):ClientCnxn$SendThread@] - Opening socket connection to server localhost/127.0.0.1:. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
-- ::, [myid:] - INFO [main-SendThread(localhost:):ClientCnxn$SendThread@] - Socket connection established to localhost/127.0.0.1:, initiating session
-- ::, [myid:] - INFO [main-SendThread(localhost:):ClientCnxn$SendThread@] - Session establishment complete on server localhost/127.0.0.1:, sessionid = 0x367ce7db1fa0003, negotiated timeout = WATCHER:: WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:(CONNECTED) ] #若有如上显示,则zookeeper集群搭建成功
搭建卡夫卡集群
仍然采用源码的方式安装。安装过程和zookeeper差不多,解压,修改配置文件,创建对应消息目录。
[root@test3 src]# tar -zxvf kafka_2.-0.10.0.0.tgz -C ../ #解压
[root@test3 src]# cd ..
[root@test3 local]# mv kafka_2.-0.10.0.0 kafka #修改名字
[root@test3 local]# cd kafka/
[root@test3 kafka]# ls
bin config libs LICENSE logs NOTICE site-docs
[root@test3 kafka]# cd config/ #
[root@test3 config]# ls #kafka的配置文件有很多,但是目前我们只需要关注 server.properties
connect-console-sink.properties connect-file-sink.properties connect-standalone.properties producer.properties zookeeper.properties
connect-console-source.properties connect-file-source.properties consumer.properties server.properties
connect-distributed.properties connect-log4j.properties log4j.properties tools-log4j.properties
配置文件如下:把其中的注释删掉了!
broker.id=3 #在每个kafka服务器中唯一的,是一个整数
port=
host.name=10.0.102.179
auto.create.topics.enable = false
delete.topic.enable = true
num.network.threads= num.io.threads= socket.send.buffer.bytes= socket.receive.buffer.bytes= socket.request.max.bytes= log.dirs=/data/kafka/logs num.partitions= num.recovery.threads.per.data.dir= log.retention.hours= log.segment.bytes= log.retention.check.interval.ms= zookeeper.connect=10.0.102.179:,10.0.102.204:,10.0.102.214:
zookeeper.connection.timeout.ms=
配置文件的参数的说明:
- broker.id: 每一个broker都需要一个标识符,使用broker.id来表示。默认是0,可以被设置为任意整数,在kafka集群中必须是唯一的。
- port:默认端口是9092,配置kafka监听的端口。
- zookeeper.connect:用于保存broker元数据的zookeeper地址是通过zookeeper.connect来指定的。新式就是上面那样,主机和端口号,多个地址用逗号隔开。上面的三个是一个zookeeper集群。若是当前连接的zookeeper宕机,broker可以连接到zookeeper群组中的其他服务器上。
- log.dirs: kafka把所有消息都保存在磁盘上,存放这些日子片段的目录是通过log.dirs指定的。它是一组用逗号分隔的本地文件系统路径。如果指定了多个路径,那么broker会根据“最少使用”原则,把同一个分区的日志片段保存到同一个路径下。需要注意,borker会往拥有最少数目分区的路径新增分区,而不是往拥有最小磁盘空间的路径新增分区。
- num.recovery.threads.per.data.dir,对于如下3种情况,kafka会使用多少个线程来处理日志片段。
- 服务器正常启动,用于打开每个分区的日志片段。
- 服务器崩溃后重启,用于检查和截短每个分区的日志片段。
- 服务器正常关闭,用于关闭日志片段。
默认情况下,每个日志目录只使用一个线程。因为这些线程只是在服务器启动和关闭时会用到,所以完全可以设置大量的线程来达到并行操作的目的。特别是对于包含大量分区的服务器来说,一旦发生崩溃,在进行恢复时使用并行操作可能会省下很多时间。所配置的数字对应的是log.dirs指定的单个日志目录。譬如,这个值被设置为8,并且log.dirx指定了3个路径,那么久需要24个线程。
- auto.create.topics.enable 默认情况下,kafka会在以下几种情况下创建主题。
- 当一个生产者开始往主题写入消息时。
- 当一个消费者开始从主题读取消息时。
- 当任意一个客户端向主题发送元数据请求是。
这个参数有点迷糊,尽量设置为false吧!
上面指定了kafa的日志目录,需要创建消息目录:
[root@test1 ~]# mkdir -p /data/kafka/logs
和zookeeper一样,把上面解压后的文件和创建的日志目录,分别拷贝到其余两台服务器上,注意修改其余两台服务器的broker.id。
然后启动kafka:
[root@test3 bin]# ls
connect-distributed.sh kafka-consumer-groups.sh kafka-reassign-partitions.sh kafka-simple-consumer-shell.sh zookeeper-server-start.sh
connect-standalone.sh kafka-consumer-offset-checker.sh kafka-replay-log-producer.sh kafka-topics.sh zookeeper-server-stop.sh
kafka-acls.sh kafka-consumer-perf-test.sh kafka-replica-verification.sh kafka-verifiable-consumer.sh zookeeper-shell.sh
kafka-configs.sh kafka-mirror-maker.sh kafka-run-class.sh kafka-verifiable-producer.sh
kafka-console-consumer.sh kafka-preferred-replica-election.sh kafka-server-start.sh windows
kafka-console-producer.sh kafka-producer-perf-test.sh kafka-server-stop.sh zookeeper-security-migration.sh #bin目录下面有很多脚本,kafka自带的有zookeeper启动,但是建议搭建独立的zookeeper集群。 [root@test2 bin]# ./kafka-server-start.sh /usr/local/kafka/config/server.properties 1>/dev/null 2>&1 &
[1] 8757
[root@test2 bin]# #kafka默认标准输出到屏幕,上面的命令把kafka挂起在后台运行。 #启动之后查看是否监听了9092端口。
[root@test2 bin]# netstat -lntp |grep 9092
tcp 0 0 ::ffff:10.0.102.204:9092 :::* LISTEN 8757/java
[root@test2 bin]#
三台服务器全部启动完毕,可以进行如下测试:
[root@test1 bin]# ./kafka-console-producer.sh --broker-list 10.0.102.179: --topci science #创建一个主题
topci is not a recognized option
[root@test1 bin]# #创建一个生产者,发送消息
[root@test1 bin]# ./kafka-console-producer.sh --broker-list 10.0.102.179:9092 --topic science
test message
first
#创意一个消费者对象,接收生产者发送的消息
[root@test1 bin]# ./kafka-console-consumer.sh --zookeeper 10.0.102.179:2181 --topic science --from-beginning
test message first #可以看到卡夫卡是一个先进先出的消息队列
若是以上的队列消息验证成功,则说明集群搭建成功、
[root@test1 bin]# ./kafka-topics.sh --zookeeper 10.0.102.179: --describe --topic science #查看主题的信息
Topic:science PartitionCount: ReplicationFactor: Configs:
Topic: science Partition: Leader: Replicas: Isr:
[root@test1 bin]#
一个异常说明:在测试的时候,刚开始总报如下错误:
[root@test1 bin]# ./kafka-console-producer.sh --broker-list localhost: --topic lianxi
test1
[-- ::,] ERROR Error when sending message to topic lianxi with key: null, value: bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after ms.
这个问题搞了好久,最好把java的版本从1.8降到了1.7之后,然后就成功了!
搭建成功的各个组件的版本信息如下:
[root@test1 ~]# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) -Bit Server VM (build 24.79-b02, mixed mode) #kafka没有类似的version命令,需要查看kafka的使用包信息
[root@test1 libs]# pwd
/usr/local/kafka/libs
[root@test1 libs]# ls kafka_2.10-0.10.0.0.jar
kafka_2.10-0.10.0.0.jar #2.10是scala的版本,后面的0.10.0.0是kafka的版本 #在zookeeper的安装目录下面有对应版本的一些包
[root@test1 zookeeper]# ls
bin CHANGES.txt contrib docs ivy.xml LICENSE.txt README_packaging.txt recipes zookeeper-3.4.6.jar zookeeper-3.4.6.jar.md5
build.xml conf dist-maven ivysettings.xml lib NOTICE.txt README.txt src zookeeper-3.4.6.jar.asc zookeeper-3.4.6.jar.sha1
[root@test1 zookeeper]#
#zookeeper的版本是3.4.6
zookeeper与卡夫卡集群搭建的更多相关文章
- 28.zookeeper单机(Standalones模式)和集群搭建笔记
zookeeper单机(Standalones模式)和集群搭建: 前奏: (1).zookeeper也可以在windows下使用,和linux一样可以单机也可以集群,具体就是解压zookeeper-3 ...
- ZooKeeper学习笔记一:集群搭建
作者:Grey 原文地址:ZooKeeper学习笔记一:集群搭建 说明 单机版的zk安装和运行参考:https://zookeeper.apache.org/doc/r3.6.3/zookeeperS ...
- ZooKeeper在centos6.4的集群搭建
首先给一个小tips,在搭建zookeeper之前,需要配置好java环境,请参看我的另一篇文章<Jdk1.8在CentOS7中的安装与配置>,还需要免密码登录,请参看我的另一篇文章< ...
- zookeeper安装与集群搭建
此处以centos系统下zookeeper安装为例,详细步骤可参考官网文档:zookeeper教程 一.单节点部署 1.下载zookeeper wget http://mirrors.hust.edu ...
- Hive2.1.1集群搭建
软件环境: linux系统: CentOS6.7 Hadoop版本: 2.6.5 zookeeper版本: 3.4.8 主机配置: 一共m1, m2, m3这五部机, 每部主机的用户名都为centos ...
- zookeeper集群搭建
1.由于是第一次搭建zk的集群,过程中遇到些问题,给自己也给遇到问题的人提供一种可能解决问题的方法. 第一步:下载zk的最新版,我下的是3.4.9,在zk的官网,下载后解压到/usr/local ta ...
- 分布式架构中一致性解决方案——Zookeeper集群搭建
当我们的项目在不知不觉中做大了之后,各种问题就出来了,真jb头疼,比如性能,业务系统的并行计算的一致性协调问题,比如分布式架构的事务问题, 我们需要多台机器共同commit事务,经典的案例当然是银行转 ...
- 初始zookeeper与集群搭建实例
zookeeper是什么 Zookeeper,一种分布式应用的协作服务,是Google的Chubby一个开源的实现,是Hadoop的分布式协调服务,它包含一个简单的原语集,应用于分布式应用的协作服务, ...
- 搜索服务Solr集群搭建 使用ZooKeeper作为代理层
上篇文章搭建了zookeeper集群 那好,今天就可以搭建solr搜服服务的集群了,这个和redis 集群不同,是需要zk管理的,作为一个代理层 安装四个tomcat,修改其端口号不能冲突.8080~ ...
随机推荐
- Rsync数据同步应用指南
1.软件简介 Rsync 是一个本地或远程数据同步工具,基于RSync算法,这个算法是澳大利亚人Andrew Tridgell发明的:可通过 LAN/WAN 快速同步多台主机间的文件.Rsync 本来 ...
- Query实例的ajax应用之二级联动的后台是采用php来做的
jQuery实例的ajax应用之二级联动的后台是采用php来做的,前台通过jquery的ajax方式实现二级联动数据库表设计 csj_trade id int(11) auto_increment ...
- CVPR2018资源汇总
CVPR 2018大会将于2018年6月18~22日于美国犹他州的盐湖城(Salt Lake City)举办. CVPR2018论文集下载:http://openaccess.thecvf.com/m ...
- Oracle安装部署之 oracle 11g install linux
#!/bin/bash#Purpose:Create and config oracle install.#Usage:Log on as the superuser('root') #1.creat ...
- Spark Streaming 在数据平台日志解析功能的应用
https://mp.weixin.qq.com/s/bGXhC9hvDj4lzK7wYYHGDg 目前,我们使用Filebeat监控日志产生的目录,收集产生的日志,打到logstash集群,接入ka ...
- socket 中午吃的啥 socket 并发服务器 fork
http://www.cnblogs.com/thinksasa/archive/2013/02/26/2934206.html zh.wikipedia.org/wiki/網路插座 在作業系統中,通 ...
- usb设备运行不正常的解决方法(转)
add by zhj:上午鼠标还用的好好的,下午就不能用了,插上之后提示“跟这台计算机连接的一个usb设备运行不正常”,尼玛,什么情况?我今天没安装软件啊,换了个USB接口也不行,在另一台电脑上试还是 ...
- 【F12】谷歌浏览器F12前端调试工具 Console
谷歌浏览器F12前端调试工具 Console 前言 先上图:不知道有多少人发现,在浏览器开发工具的“Console”上的百度首页的关于百度招聘的信息: 今天要给大家介绍的就是是Web前端调试工具中的C ...
- tomcat访问
1:html页面或者需要访问的对象需要放置到webapps/ROOT下面既可以 http://localhost:8080/直接访问 2:
- Python安装常见问题(1):zipimport.ZipImportError: can't decompress data
在CentOS以及其他的Linux系统中遇到安装包安装错误的原因,大多数都是因为缺少依赖包导致的,所以对于错误:zipimport.ZipImportError: can’t decompress d ...