Kafka学习之(六)搭建kafka集群
想要搭建kafka集群,必须具备zookeeper集群,关于zookeeper集群的搭建,在Kafka学习之(五)搭建kafka集群之Zookeeper集群搭建博客有说明。需要具备两台以上装有zookeeper的服务器,其次,稳定可靠的kafka版本,本篇使用kafka_2.11-0.9.0.1。
准备
192.168.244.131、192.168.244.133、192.168.244.134,kafka下载地址 https://archive.apache.org/dist/kafka/0.9.0.1/kafka_2.11-0.9.0.1.tgz(wget下载)
创建目录并解压
我习惯把压缩包下载到/usr/local/src下,然后我把下载好的kafka tag包做了目录拷贝。
# cd /usr/local
# mkdir kafka
# cd kafka
# mkdir kafkalogs
# cp /usr/local/kafka......tar.gz /usr/local/kafka
编辑配置文件
cd /usr/local/kafka/kafka_2.-0.9.0.1/config/ //进入config目录
主要关注:server.properties 这个文件即可,我们可以发现在目录下:
有很多文件,这里可以发现有Zookeeper文件,我们可以根据Kafka内带的zk集群来启动,但是建议使用独立的zk集群。
broker.id= #当前机器在集群中的唯一标识,和zookeeper的myid性质一样
port= #当前kafka对外提供服务的端口默认是9092,这里改大
host.name=192.168.244.131 #这个参数默认是关闭的,在0..1有个bug,DNS解析问题,在解析的时候会解析成ip,这里会有失败率。
num.network.threads= #这个是borker进行网络处理的线程数
num.io.threads= #这个是borker进行I/O处理的线程数
log.dirs=/usr/local/kafka/kafkalogs/ #消息存放的目录,这个目录可以配置为“,”逗号分割的表达式,上面的num.io.threads要大于这个目录的个数这个目录,如果配置多个目录,新创建的topic他把消息持久化的地方是,当前以逗号分割的目录中,那个分区数最少就放那一个
socket.send.buffer.bytes= #发送缓冲区buffer大小,数据不是一下子就发送的,先回存储到缓冲区了到达一定的大小后在发送,能提高性能
socket.receive.buffer.bytes= #kafka接收缓冲区大小,当数据到达一定大小后在序列化到磁盘
socket.request.max.bytes= #这个参数是向kafka请求消息或者向kafka发送消息的请请求的最大数,这个值不能超过java的堆栈大小
num.partitions= #默认的分区数,一个topic默认1个分区数
log.retention.hours= #默认消息的最大持久化时间,168小时,7天
message.max.byte= #消息保存的最大值5M
default.replication.factor= #kafka保存消息的副本数,为了安全,如果一个副本失效了,另一个还可以继续提供服务
replica.fetch.max.bytes= #取消息的最大直接数
log.segment.bytes= #这个参数是:因为kafka的消息是以追加的形式落地到文件,当超过这个值的时候,kafka会新起一个文件
log.retention.check.interval.ms= #每隔300000毫秒去检查上面配置的log失效时间(log.retention.hours= ),到目录查看是否有过期的消息如果有,删除
log.cleaner.enable=false #是否启用log压缩,一般不用启用,启用的话可以提高性能
zookeeper.connect=192.168.244.131:,192.168.244.133:,192.168.244.134: #设置zookeeper的连接端口
上面的参数只是作为了解一下,实际搭建中需要根据场景来配置。
现在只需要对每台机器的配置文件做如下更改
#broker.id= //每台服务器的broker.id都不能相同,从0开始,分别0、1、2
#listeners=PLAINTEXT://:9092 #hostname
host.name=192.168.244.131 //分别对应ip log.dirs=/usr/local/kafka/kafkalogs //日志目录 #在log.retention.hours= //下面新增下面三项
message.max.byte=
default.replication.factor=
replica.fetch.max.bytes= #设置zookeeper的连接端口
zookeeper.connect=192.168.244.131:,192.168.244.133:,192.168.244.134:
启动服务
在启动kafka之前,确保每台机器的防火墙关闭,其次zookeeper集群也是启动中,确保以上条件成立然后执行命令启动kafka
#./kafka-server-start.sh -daemon ../config/server.properties //在kafka的目录下bin目录执行。 表示后台以server.properties配置文件执行。 三台分别执行
# jps //检查服务是否启动
Jps
Kafka
QuorumPeerMain
创建Topic来验证是否创建成功
这是官方文档说明:http://kafka.apache.org/quickstart
//在192.168.244.131 创建Topic
# ./kafka-topics.sh --create --zookeeper 192.168.244.131: --replication-factor --partitions --topic wt645631686 Created topic "wt645631686". //解释
--replication-factor #复制两份
--partitions #创建1个分区
--topic #主题为wt645631686
//分别在192.168.244.133和192.168.244.134上创建订阅者
# ./kafka-console-consumer.sh --zookeeper 192.168.244.134: --topic wt645631686
//在192.168.244.131上创建发布者
# ./kafka-console-producer.sh --broker-list 192.168.244.131: --topict 645631686
在192.168.244.131上发布测试,分别观察另外两台机器。
topic其他说明
# ./kafka-topics.sh --list --zookeeper localhost:12181 //显示我们创建的所有topic
# ./kafka-topics.sh --describe --zookeeper 192.168.244.131: --topic wt645631686 //查看指定topic情况
Topic:wt645631686 PartitionCount:1 //一个分区 ReplicationFactor: Configs:
Topic: wt645631686 Partition: Leader: Replicas: , Isr: ,
到这里kafka集群就搭建完了~
日志说明
默认kafka的日志是保存在/opt/kafka/kafka_2.10-0.9.0.0/logs目录下的,这里说几个需要注意的日志
- server.log ,kafka的运行日志
- state-change.log ,因为kafka他是用zookeeper来保存状态,所以他可能会进行切换,切换的日志就保存在这里
- controller.log ,kafka选择一个节点作为“controller”,当发现有节点down掉的时候它负责在游泳分区的所有节点中选择新的leader,这使得Kafka可以批量的高效的管理所有分区节点的主从关系。如果controller down掉了,活着的节点中的一个会备切换为新的controller.
查看zookeeper情况
进入zookeeper的项目目录
# pwd
/usr/local/zookeeper/zookeeper-3.4./bin # ./zkCli.sh -server 127.0.0.1: //默认是不用加’-server‘参数的因为我们修改了他的端口
Connecting to 127.0.0.1:
-- ::, [myid:] - INFO [main:Environment@] - Client environment:zookeeper.version=3.4.-, built on // : GMT
-- ::, [myid:] - INFO [main:Environment@] - Client environment:host.name=localhost
-- ::, [myid:] - INFO [main:Environment@] - Client environment:java.version=1.8.0_91
-- ::, [myid:] - INFO [main:Environment@] - Client environment:java.vendor=Oracle Corporation
-- ::, [myid:] - INFO [main:Environment@] - Client environment:java.home=/usr/local/jdk1..0_91/jre
-- ::, [myid:] - INFO [main:Environment@] - Client environment:java.class.path=/usr/local/zookeeper/zookeeper-3.4./bin/../build/classes:/usr/local/zookeeper/zookeeper-3.4./bin/../build/lib/*.jar:/usr/local/zookeeper/zookeeper-3.4.6/bin/../lib/slf4j-log4j12-1.6.1.jar:/usr/local/zookeeper/zookeeper-3.4.6/bin/../lib/slf4j-api-1.6.1.jar:/usr/local/zookeeper/zookeeper-3.4.6/bin/../lib/netty-3.7.0.Final.jar:/usr/local/zookeeper/zookeeper-3.4.6/bin/../lib/log4j-1.2.16.jar:/usr/local/zookeeper/zookeeper-3.4.6/bin/../lib/jline-0.9.94.jar:/usr/local/zookeeper/zookeeper-3.4.6/bin/../zookeeper-3.4.6.jar:/usr/local/zookeeper/zookeeper-3.4.6/bin/../src/java/lib/*.jar:/usr/local/zookeeper/zookeeper-3.4.6/bin/../conf:.:/usr/local/jdk/lib/dt.jar:/usr/local/jdk/lib/tools.jar
2018-02-15 15:12:57,363 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2018-02-15 15:12:57,363 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2018-02-15 15:12:57,364 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA>
2018-02-15 15:12:57,364 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux
2018-02-15 15:12:57,364 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64
2018-02-15 15:12:57,365 [myid:] - INFO [main:Environment@100] - Client environment:os.version=2.6.32-358.el6.x86_64
2018-02-15 15:12:57,365 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root
2018-02-15 15:12:57,366 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root
2018-02-15 15:12:57,366 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/usr/local/zookeeper/zookeeper-3.4.6/bin
2018-02-15 15:12:57,368 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=127.0.0.1:12181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@799f7e29
Welcome to ZooKeeper!
2018-02-15 15:12:57,404 [myid:] - INFO [main-SendThread(127.0.0.1:12181):ClientCnxn$SendThread@975] - Opening socket connection to server 127.0.0.1/127.0.0.1:12181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2018-02-15 15:12:57,481 [myid:] - INFO [main-SendThread(127.0.0.1:12181):ClientCnxn$SendThread@852] - Socket connection established to 127.0.0.1/127.0.0.1:12181, initiating session
2018-02-15 15:12:57,496 [myid:] - INFO [main-SendThread(127.0.0.1:12181):ClientCnxn$SendThread@1235] - Session establishment complete on server 127.0.0.1/127.0.0.1:12181, sessionid = 0x167509a9cdd0004, negotiated timeout = 30000 WATCHER:: WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1:12181(CONNECTED) 0]
[zk: 127.0.0.1:(CONNECTED) ] ls / //查看目录情况 执行“ls /”
[controller, controller_epoch, brokers, zookeeper, admin, isr_change_notification, consumers, config]
//上面的显示结果中:只有zookeeper是,zookeeper原生的,其他都是Kafka创建的
[zk: 127.0.0.1:(CONNECTED) ] ls /
[controller, controller_epoch, brokers, zookeeper, admin, isr_change_notification, consumers, config]
[zk: 127.0.0.1:(CONNECTED) ] ls /brokers/topics
[wt645631686]
[zk: 127.0.0.1:(CONNECTED) ] ls /brokers/topics/wt645631686
[partitions]
[zk: 127.0.0.1:(CONNECTED) ] ls /brokers/topics/wt645631686/partitions
[]
[zk: 127.0.0.1:(CONNECTED) ] get /brokers/ids/
{"jmx_port":-,"timestamp":"","endpoints":["PLAINTEXT://192.168.244.131:19092"],"host":"192.168.244.131","version":,"port":}
cZxid = 0x200000017
ctime = Mon Nov :: PST
mZxid = 0x200000017
mtime = Mon Nov :: PST
pZxid = 0x200000017
cversion =
dataVersion =
aclVersion =
ephemeralOwner = 0x167509a9cdd0000
dataLength =
numChildren =
[zk: 127.0.0.1:(CONNECTED) ] get /brokers/topics/wt645631686/partitions/ //查看partion
null
cZxid = 0x200000029
ctime = Mon Nov :: PST
mZxid = 0x200000029
mtime = Mon Nov :: PST
pZxid = 0x20000002a
cversion =
dataVersion =
aclVersion =
ephemeralOwner = 0x0
dataLength =
numChildren =
暂时完毕~
Kafka学习之(六)搭建kafka集群的更多相关文章
- 05.kafka提前准备工作:搭建zookeeper集群环境
总体参考:http://www.cnblogs.com/zhangs1986/p/6564839.html 搭建之间同步下spark01.02.03的环境 复制/opt/flume这个文件夹到 spa ...
- Apache Kafka学习 (二) - 多代理(broker)集群
1. 配置server.properties > cp config/server.properties config/server-1.properties> cp config/ser ...
- ELK+Kafka学习笔记之搭建ELK+Kafka日志收集系统集群
0x00 概述 关于如何搭建ELK部分,请参考这篇文章,https://www.cnblogs.com/JetpropelledSnake/p/9893566.html. 该篇用户为非root,使用用 ...
- kafka环境搭建2-broker集群+zookeeper集群(转)
原文地址:http://www.jianshu.com/p/dc4770fc34b6 zookeeper集群搭建 kafka是通过zookeeper来管理集群.kafka软件包内虽然包括了一个简版的z ...
- Kafka 详解(二)------集群搭建
这里通过 VMware ,我们安装了三台虚拟机,用来搭建 kafka集群,虚拟机网络地址如下: hostname ipaddress ...
- docker 搭建zookeeper集群和kafka集群
docker 搭建zookeeper集群 安装docker-compose容器编排工具 Compose介绍 Docker Compose 是 Docker 官方编排(Orchestration)项目之 ...
- 使用Kafka的一些简单介绍: 1集群 2原理 3 术语
目录 第一节 Kafka 集群 Kafka 集群搭建 Kafka 集群快速搭建 第二节 集群管理工具 集群管理工具 集群 Issues 第三节 使用命令操纵集群 第四节 Kafka 术语说明 第五节 ...
- 从零开始学习docker之在docker中搭建redis(集群)
docker搭建redis集群 docker-compose是以多容器的方式启动,非常适合用来启动集群 一.环境准备 云环境:CentOS 7.6 64位 二.安装docker-compose #需要 ...
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- 分布式缓存技术redis学习(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
随机推荐
- 利用反射生成JDK动态代理
利用反射生成JDK动态代理 在Java的java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过使用这个类和接口可以生成JDK动态代理类和动态代理 ...
- 洛谷P4438 道路 [HNOI/AHOI2018] 树形dp
正解:树形dp 解题报告: 传送门! 昂首先看懂题目趴QwQ大概就是说有棵满二叉树,有n个叶子节点(乡村)和n-1个非叶子节点,然后这棵树的每个节点有三个属性abc,对每个非叶子节点可以从与子节点的两 ...
- 启动yarn
$cd /app/hadoop/hadoop-2.2.0/sbin $./start-yarn.sh
- EL--Expression Language
EL 存取变量数据的方法很简单,例如:${username}.它的意思是取出某一范围中名称为username的变量.因为我们并没有指定哪一个 范围的username,所以它的默认值会先从Page 范围 ...
- flask简单的路由分发
flask简单的路由分发 from flask import Flask, request app = Flask(__name__) @app.route('/hello') def index() ...
- java-信息安全(八)-迪菲-赫尔曼(DH)密钥交换【不推荐,推荐Oakley】
概述 信息安全基本概念: DH(Diffie–Hellman key exchange,迪菲-赫尔曼密钥交换) DH 是一种安全协议,,一种确保共享KEY安全穿越不安全网络的方法,它是OAKLEY的一 ...
- IO操作文件的复制与删除
import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IO ...
- [py]py常用模块小结
- python md5校验: https://blog.csdn.net/linda1000/article/details/17581035 import hashlib hashlib.md5( ...
- [py][mx]django城市-教学机构-教师模型设计
分析下城市-教学机构-教师模型设计 CourseOrg 课程信息 Teacher 教师信息 CityDict 城市信息 代码 from datetime import datetime from dj ...
- 使用block的好处
1 使用block 可以轻松地绑定各处代码块,使用delete 结构是分散的,不利于变量之间传值,不像block可以随意地获取变量值. 2.使用block可以方便执行异步代码,作为异步处理回调. In ...