kafka集群与zookeeper集群 配置过程
Kafka的集群配置一般有三种方法,即
(1)Single node – single broker集群;
(2)Single node – multiple broker集群;
(3)Multiple node – multiple broker集群。
前两种方法官网上有配置过程((1)(2)配置方法官网教程),下面会简单介绍前两种方法,主要介绍最后一种方法。
准备工作:
1.Kafka的压缩包,这里选用的是kafka_2.10-0.8.2.2.tgz。
2.三台CentOS 6.4 64位虚拟机。分别是192.168.121.34(主机名为master)、192.168.121.35(主机名为datanode1)、192.168.121.36(主 机名为datanode2)。
一、Single node – single broker集群配置(单节点单boker集群配置)
注:图片来源自网络
1.解压Kafka的压缩包
[root@master kafkainstall]# tar -xzf kafka_2.10-0.8.2.0.tgz
[root@master kafkainstall]# cd kafka_2.10-0.8.2.2
这里我新建了一个kafkainstall文件夹来存放加压后的文件,然后进入解压后的kafka_2.10-0.8.2.2文件夹。
2.启动zookeeper服务
由于Kafka的压缩包里已经有了zookeeper,而且提供了启动kafka的脚本(在kafka_2.10-0.8.2.2/bin目录下)和zookeeper的配置文件 (在kafka_2.10-0.8.2.2/config目录下):
[root@master kafka_2.10-0.8.2.2]# bin/zookeeper-server-start.sh config/zookeeper.properties &
zookeeper的配置文件zookeeper.properties里面的关键属性:
# the directory where the snapshot is stored.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
默认情况下,zookeeper的snapshot 文件会存储在/tmp/zookeeper下,zookeeper服务器会监听 2181端口。
3.启动Kafka broker服务
由于kafka已经提供了启动kafka的脚本(在kafka_2.10-0.8.2.2/bin目录下),这里直接启动即可:
[root@master kafka_2.10-0.8.2.2]# bin/kafka-server-start.sh config/server.properties &
Kafka broker的配置文件的关键属性:
# The id of the broker. This must be set to a unique integer for each broker.
broker.id=0
# The port the socket server listens on
port=9092
# A comma seperated list of directories under which to store log files
log.dirs=/tmp/kafka-logs
# Zookeeper connection string (see zookeeper docs for details).
# This is a comma separated host:port pairs, each corresponding to a zk
# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002".
# You can also append an optional chroot string to the urls to specify the
# root directory for all kafka znodes.
zookeeper.connect=localhost:2181
4.创建只有一个Partition的topic
[root@master kafka_2.10-0.8.2.2]#bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic mytest-topic
这里创建了一个mytest-topic的topic。
5.启动一个生产者进程来发送消息
[root@master kafka_2.10-0.8.2.2]# bin/kafka-console-producer.sh --broker-list localhost:9092 --topic mytest-topic
其中,(1)参数broker-list定义了生产者要推送消息的broker地址,以<IP地址:端口>形式 ,由上面的broker的配置文件可知 为localhost:9092;
(2)参数topic指定生产者发送给哪个topic。
生产者配置文件关键属性:
# list of brokers used for bootstrapping knowledge about the rest of the cluster
# format: host1:port1,host2:port2 ...
metadata.broker.list=localhost:9092
# specifies whether the messages are sent asynchronously (async) or synchronously (sync)
producer.type=sync
# message encoder
serializer.class=kafka.serializer.DefaultEncoder
接着你就可以输入你想要发送给消费者的消息了。(也可以先启动消费者进程,这样生产者发送的消息可以立刻显示)
6.启动一个消费者进程来消费消息
需要另外打开一个终端:
[root@master kafka_2.10-0.8.2.2]# bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic mytest-topic --from-beginning
其中,(1)参数zookeeper指定了连接zookeeper的地址,以<IP地址:端口>形式;
(2)topic参数指定了从哪个topic来pull消息。
当你执行这个命令之后,你便可以看到控制台上打印出的生产者生产的消息:
消费者配置文件consumer.properties关键属性:
# Zookeeper connection string
# comma separated host:port pairs, each corresponding to a zk
# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002"
zookeeper.connect=localhost:2181
# timeout in ms for connecting to zookeeper
zookeeper.connection.timeout.ms=60000
#consumer group id
group.id=test-consumer-group
二、Single node – multiple broker集群(单节点多boker集群配置)
注:图片来源自网络
1.启动zookeeper服务
启动方法跟上面一样
2.启动Kafka broker服务
如果需要在单个节点(即一台机子)上面启动多个broker(这里我们启动三个broker),需要准备多个server.properties文件即可,我们需要复制kafka_2.10-0.8.2.2/config/server.properties文件。
如下:
[root@master config]# cp server.properties server-1.properties
[root@master config]# cp server.properties server-2.properties
然后修改server-1.properties和server-2.properties。
server-1:
1. broker.id=1
2.port=9093
3.log.dirs=/tmp/kafka-logs-1
server-2:
1. broker.id=2
2.port=9094
3.log.dirs=/tmp/kafka-logs-2
然后我们再用这两个配置文件分别启动一个broker:
[root@master kafka_2.10-0.8.2.2]# bin/kafka-server-start.sh config/server-1.properties &
[root@master kafka_2.10-0.8.2.2]# bin/kafka-server-start.sh config/server-2.properties &
然后启动:
[root@master kafka_2.10-0.8.2.2]# bin/kafka-server-start.sh config/server.properties &
3.创建只有1个Partition和3个备份的的topic
[root@master kafka_2.10-0.8.2.2]# bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic
4.启动一个Producer发送消息
如果用一个Producer发送给多个broker(这里是3个),唯一需要改变的就是在broker-list属性中指定要连接的broker:
[root@master kafka_2.10-0.8.2.2]#bin/kafka-console-producer.sh --broker-list localhost:9092,localhost:9093,
localhost:9094 --topic my-replicated-topic
5.启动一个消费者来消费消息
[root@master kafka_2.10-0.8.2.2]# bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topicmy-replicated-topic --from-beginning
如果要让不同的Producer发送给不同的broker,我们也仅仅需要为每个Producer配置响应的broker-list属性即可。
三、Multiple node – multiple broker集群(多节点多boker集群配置)
注:图片来源自网络
注:上图中每个Node里有两个broker,我这里为了简单写,在每个节点里有一个broker(通过上面的单节点多broker的介绍,可以很容易 扩展)
1.首先需要配置一个zookeeper集群
上面一和二中提到的都是在192.168.121.34(主机名为master)上进行的,现在要扩展为多节点多broker集群,就要在另外2台机子上也要安装Kafka,方法同一中的步骤1。
2.zookeeper集群配置
zookeeper-0(即上面192.168.121.34(主机名为master)中的zookeeper):
配置修改为:
# the directory where the snapshot is stored.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
#the blow five lines are added by @author.
initLimit=5
syncLimit=2
server.0=192.168.121.34:2888:3888
server.1=192.168.121.35:2889:3889
server.2=192.168.121.36:2890:3890
然后在dataDir目录/data/zookeeper/下写一个myid文件,命令如下:
echo0 >myid
注意:这个id是zookeeper的主机标识,每个主机id不同第二台是1192.168.121.35(主机名为datanode1),第三台是2192.168.121.36(主机名为datanode2)。也就是说3个zookeeper配置文件除了myid不同,其他都一样。
最后依次启动3台机子上的zookeeper服务。
3.配置broker 集群
broker的配置配置文件(server.properties):按照单节点多实例配置方法在一个节点上启动1个实例,不同的地方是zookeeper的连接串 需要把所有节点的zookeeper都连接起来。
(1)192.168.121.34(主机名为master)中的kafka_2.10-0.8.2.2/bin/目录下的server.properties文件修改:
# Hostname the broker will bind to. If not set, the server will bind to all interfaces
host.name=192.168.121.34
# A comma seperated list of directories under which to store log files
log.dirs=/tmp/kafka-logs-0
# Zookeeper connection string (see zookeeper docs for details).
# This is a comma separated host:port pairs, each corresponding to a zk
# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002".
# You can also append an optional chroot string to the urls to specify the
# root directory for all kafka znodes.
zookeeper.connect=192.168.121.34:2181,192.168.121.35:2181,192.168.121.36:2181
# Timeout in ms for connecting to zookeeper
zookeeper.connection.timeout.ms=60000
注意:把host.name的注释去掉,并更改为本机的IP地址。zookeeper.connection.timeout.ms的默认为6000,但是最好改大点,不然容易超时,但也不能太大,太大影响效率。
(2)192.168.121.35(主机名为datanode1)中的kafka_2.10-0.8.2.2/bin/目录下的server.properties文件修改:
# Hostname the broker will bind to. If not set, the server will bind to all interfaces
host.name=192.168.121.35
# A comma seperated list of directories under which to store log files
log.dirs=/tmp/kafka-logs-1
其它与上面(1)中相同。
(3)192.168.121.36(主机名为datanode2)中的kafka_2.10-0.8.2.2/bin/目录下的server.properties文件修改:
# Hostname the broker will bind to. If not set, the server will bind to all interfaces
host.name=192.168.121.36
# A comma seperated list of directories under which to store log files
log.dirs=/tmp/kafka-logs-2
其它与上面(1)中相同。
4.生产者配置文件修改
# list of brokers used for bootstrapping knowledge about the rest of the cluster
# format: host1:port1,host2:port2 ...
metadata.broker.list=192.168.121.34:9092,192.168.121.35:9092,192.168.121.36:9092
# name of the partitioner class for partitioning events; default partition spreads data randomly
#partitioner.class=
# specifies whether the messages are sent asynchronously (async) or synchronously (sync)
producer.type=async
5.消费者配置文件修改
# Zookeeper connection string
# comma separated host:port pairs, each corresponding to a zk
# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002"
zookeeper.connect=191.168.121.34:2181,191.168.121.35:2181,191.168.121.36:2181
# timeout in ms for connecting to zookeeper
zookeeper.connection.timeout.ms=60000
6.生产者发送消息
(1)首先创建一个test-replicated-topic(在192.168.121.34(主机名为master)中)
[root@master kafka_2.10-0.8.2.2]#bin/kafka-topics.sh --create --zookeeper192.168.121.34:2181 --replication-factor 3 --partitions 1 --topictest-replicated-topic
然后查看已有的topic:
可以看到test-replicated-topic已经创建成功,然后我们再看每个broker在做什么:
其中leader是负责对给定的partition执行所有的读和写的节点,此时的leader是0号节点(即0号broker)。更多解释请看官网。
(2)生产者发送消息(192.168.121.34(主机名为master)节点上)
7.消费者消费消息(分别在三台机子上消费上面发送的消息)
(1)master上:
(2)datanode1上:
(3)datanode2上:
可以看到,三个节点上的消费者都能正常的接收到其中一个节点上发送的消息。这说明kafka集群基本上已经超过部署。
PS:实际操作过程中3个节点上的zookeeper的监听端口我也没有统一用2181,但是可以用统一的端口,并没有影响。
kafka集群与zookeeper集群 配置过程的更多相关文章
- Centos7上搭建activemq集群和zookeeper集群
Zookeeper集群的搭建 1.环境准备 Zookeeper版本:3.4.10. 三台服务器: IP 端口 通信端口 10.233.17.6 2181 2888,3888 10.233.17.7 2 ...
- 大数据集群环境 zookeeper集群环境安装
大数据集群环境 zookeeper集群环境准备 zookeeper集群安装脚本,如果安装需要保持zookeeper保持相同目录,并且有可执行权限,需要准备如下 编写脚本: vi zkInstall.s ...
- kafka集群和zookeeper集群的部署,kafka的java代码示例
来自:http://doc.okbase.net/QING____/archive/19447.html 也可参考: http://blog.csdn.net/21aspnet/article/det ...
- Kafka学习之(五)搭建kafka集群之Zookeeper集群搭建
Zookeeper是一种在分布式系统中被广泛用来作为:分布式状态管理.分布式协调管理.分布式配置管理.和分布式锁服务的集群.kafka增加和减少服务器都会在Zookeeper节点上触发相应的事件kaf ...
- solr集群搭建,zookeeper集群管理
1. 第一步 把solrhome中的配置文件上传到zookeeper集群.使用zookeeper的客户端上传. 客户端命令位置:/root/solr-4.10.3/example/scripts/cl ...
- 配置Kafka集群和zookeeper集群
原文链接请参见:http://www.cnblogs.com/5iTech/articles/6043224.html
- 高可用集群(HA)之Keeplived原理+配置过程
原理--> 通过vrrp协议,定义虚拟路由,在多个服务节点上进行转移. 通过节点优先级,将初始虚拟路由到优先级高的节点上,checker工作进程检测到主节点出问题时,则降低此节点优先级,从而实现 ...
- kafka环境搭建2-broker集群+zookeeper集群(转)
原文地址:http://www.jianshu.com/p/dc4770fc34b6 zookeeper集群搭建 kafka是通过zookeeper来管理集群.kafka软件包内虽然包括了一个简版的z ...
- kafka+zookeeper集群
参考: kafka中文文档 快速搭建kafka+zookeeper高可用集群 kafka+zookeeper集群搭建 kafka+zookeeper集群部署 kafka集群部署 kafk ...
随机推荐
- Fastqc 能够识别的碱基编码格式
Fastqc 能够自动识别序列的碱基编码格式,我查看一下源代码,发现是碱基编码格式一共分为 1)sanger/illumina 1.9 2) illumina 1.3 3) illumina 1.5 ...
- 【Java面试题】37 说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此 数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插 ...
- db2
关于3种导入导出操作进行简单的介绍:export:导出数据,支持IXF,DEL或WSFimport:导入数据,可以向表中导入数据,支持上面提到的4种文件类型. load:导入数据,功能和impo ...
- LR中点鼠标做关联(winsock协议)
转自:http://blog.csdn.net/zeeslo/article/details/1661791 今天写一下winsock的关联操作. 以前看过一个文档.在英文版的讲winsock的,其中 ...
- Solr学习之一 --------环境搭建
一.准备工具 下载Solr,以目前最新版solr-6.1.0为例 准备servlet容器,Tomcat,Jetty,Resin之类.以Tomcat7为例 二.开始动手 将solr解压出来,在sol ...
- mongodb group php 操作
紧接着上篇来,这篇主要讲,mongodb的group功能,做的还是挺强大的,相当对于find(),skip(),distinct()等,用法比较复杂. 测试数据 > db.fruit.find( ...
- Windows "计划任务"功能设置闹钟~
相信很多人和我一样在使用电脑时都会遇到这样一个麻烦:不知道如何在windows 中设置一个闹铃.当我们在“开始”菜单的所有程序中找了一遍又一遍,甚至使用Everything.exe做全盘的搜索,都没有 ...
- 改善C#程序的建议5:引用类型赋值为null与加速垃圾回收
http://www.cnblogs.com/luminji/archive/2011/04/07/2007205.html 在标准的Dispose模式中(见前一篇博客“C#中标准Dispose模式的 ...
- Swift coreAnimation 加计时器写的游戏《飞机大战》
近期在学习swift的动画和图层.就用现学的东西写了个游戏,基本思想 基本功能都实现了.图片都是在网上找得.希望能帮助大家更好的理解动画和图层. 声明下,我是刚開始学习的人,代码写的不好.大家应该都能 ...
- Extjs学习笔记--(三,调试技巧)
FireFox 1.firedebug(略) 2.illuminations 在illuminations页面可也看到缩写的extjs的代码,同时可以进行相应的调试 3,Firedebug AutoC ...