原文地址:http://www.jianshu.com/p/dc4770fc34b6

zookeeper集群搭建

kafka是通过zookeeper来管理集群。
kafka软件包内虽然包括了一个简版的zookeeper,但是感觉功能有限。在生产环境下,建议还是直接下载官方zookeeper软件。

  • 下载 最新版的zookeeper软件
    wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz
  • 解压,并把解压后的文件移动到/var/zookeeper下,重命名为zookeeper00
    tar -xzf zookeeper-3.4.8.tar.gz
    mv zookeeper-3.4.8 /var/zookeeper/
    cd /var/zookeeper/
    mv zookeeper-3.4.8 zookeeper00
  • 进入/var/zookeeper/zookeeper00/conf目录下,将zoo_sample.cfg修改为zoo.cfg(因为zookeeper启动时默认读的配置文件就叫zoo.cfg)
    cd /var/zookeeper/zookeeper00/conf
    mv zoo_sample.cfg zoo.cfg
  • zookeeper配置文件修改
    tickTime=2000 #心跳时间,单位:毫秒
    initLimit=10 #Follower在启动时需要在10个心跳时间内从Leader同步数据
    syncLimit=5 #超过5个心跳时间收不到Follower的响应,就认为此Follower已经下线
    dataDir=/zyxx_data/zookeeper/data00 #zookeeper存储数据的目录
    clientPort=2181 #zookeeper服务端口
    server.0=192.168.6.56:20881:30881
    server.1=192.168.6.56:20882:30882
    server.2=192.168.6.56:20883:30883
    • server.0、server.1、server.2 是指整个zookeeper集群内的节点列表。server的配置规则为:server.N=YYY:A:B
    • N表示服务器编号
    • YYY表示服务器的IP地址
    • A为LF通信端口,表示该服务器与集群中的leader交换的信息的端口。
    • B为选举端口,表示选举新leader时服务器间相互通信的端口(当leader挂掉时,其余服务器会相互通信,选择出新的leader)
    • 一般来说,集群中每个服务器的A端口都是一样,每个服务器的B端口也是一样。但是当所采用的为伪集群时,IP地址都一样,只能是A端口和B端口不一样。
  • zookeeper多节点配置

    通过以上配置,一个zookeeper节点就做好了,下面配置多个节点,我们把zookeeper根目录zookeeper00拷贝多份并重命名

    cp -a zookeeper00/ zookeeper01
    cp -a zookeeper00/ zookeeper02

    针对zookeeper01/conf/zoo.cfg和zookeeper02/conf/zoo.cfg,同样需要修改上面几个地方。修改后参数具体如下(由于是在同一台机器上模拟集群,所以dataDir、clientPort不能一样)
    zookeeper01/conf/zoo.cfg

    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/zyxx_data/zookeeper/data01
    clientPort=2182
    server.0=192.168.6.56:20881:30881
    server.1=192.168.6.56:20882:30882
    server.2=192.168.6.56:20883:30883

    zookeeper02/conf/zoo.cfg

    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/zyxx_data/zookeeper/data02
    clientPort=2183
    server.0=192.168.6.56:20881:30881
    server.1=192.168.6.56:20882:30882
    server.2=192.168.6.56:20883:30883
  • zookeeper数据目录创建

    zookeeper三个节点对应的数据目录分别为

    /zyxx_data/zookeeper/data00
    /zyxx_data/zookeeper/data01
    /zyxx_data/zookeeper/data02

    创建好对应的目录后,要分别在这三个目录下创建一个名为myid的文件,文件内容只有一个数字,代表zookeeper节点的唯一id,即要确保此id在集群内唯一,且要跟配置文件中的server.0、server.1、server.2 对应上。

 

kafka broker集群搭建

  • kafka 下载、解压
    wget http://apache.opencas.org/kafka/0.9.0.1/kafka_2.11-0.9.0.1.tgz
    tar -xzf kafka_2.11-0.9.0.0.tgz
  • kafka broker配置文件修改

    修改kafka根目录下的config/server.properties

    broker.id=0 #整个集群内唯一id号,整数,一般从0开始
    listeners=PLAINTEXT://192.168.6.56:9092 #协议、当前broker机器ip、端口,此值可以配置多个,应该跟SSL等有关系,更多用法尚未弄懂,这里修改为ip和端口。
    port=9092 #broker端口
    host.name=192.168.6.56 #broker 机器ip
    log.dirs=/zyxx_data/kafka-logs/kafka00 #kafka存储数据的目录
    zookeeper.connect=192.168.6.56:2181,192.168.6.56:2182,192.168.6.56:2183 #zookeeper 集群列表
  • kafka broker多节点配置

    kafka多节点配置,可以像zookeeper一样把软件目录copy多份,修改各自的配置文件。这里介绍另外一种方式:同一个软件目录程序,但使用不同的配置文件启动

    使用不同的配置文件启动多个broker节点,这种方式只适合一台机器下的伪集群搭建,在多台机器的真正集群就没有意义了

  • 把kafka根目录下的config/server.properties copy两份,名称分别修改为:server-1.properties 、server-2.properties。各自修改他们的配置如下:

    config/server-1.properties

    broker.id=1
    listeners=PLAINTEXT://192.168.6.56:9093
    port=9093
    host.name=192.168.6.56
    log.dirs=/zyxx_data/kafka-logs/kafka01
    zookeeper.connect=192.168.6.56:2181,192.168.6.56:2182,192.168.6.56:2183

    config/server-2.properties

    broker.id=2
    listeners=PLAINTEXT://192.168.6.56:9094
    port=9094
    host.name=192.168.6.56
    log.dirs=/zyxx_data/kafka-logs/kafka02
    zookeeper.connect=192.168.6.56:2181,192.168.6.56:2182,192.168.6.56:2183

集群启动

  • zookeeper集群启动

    进入到/var/zookeeper/目录,执行

    zookeeper00/bin/zkServer.sh start
    zookeeper01/bin/zkServer.sh start
    zookeeper02/bin/zkServer.sh start

    我们可以通过以下命令查看zookeeper是否已启动

    ps -ef | grep zoo.cfg

    查看zookeeper进程信息
  • kafka 集群启动

    进入到kafka目录,执行

    bin/kafka-server-start.sh -daemon config/server.properties
    bin/kafka-server-start.sh -daemon config/server-1.properties
    bin/kafka-server-start.sh -daemon config/server-2.properties

    "-daemon" 参数代表以守护进程的方式启动kafka server。
    官网及网上大多给的启动命令是没有"-daemon"参数,如:“bin/kafka-server-start.sh config/server.properties &”,但是这种方式启动后,如果用户退出的ssh连接,进程就有可能结束,具体不清楚为什么。

    我们可以通过以下命令查看kafka server是否已启动

    ps -ef | grep config/server

    查看kafka server进程信息

测试

为了简单起见,这里通过命令行的方式启动生产者和消费者进行测试。

  • 创建主题

    进入到kafka目录,创建“test5”topic主题:分区为3、备份为3的

    bin/kafka-topics.sh --create --zookeeper 192.168.6.56:2181,192.168.6.56:2182,192.168.6.56:2183 --replication-factor 3 --partitions 3 --topic test5

    --zookeeper : zookeeper集群列表,用英文逗号分隔。可以不用指定zookeeper整个集群内的节点列表,只指定某个或某几个zookeeper节点列表也是你可以的
    replication-factor复制数目,提供failover机制;1代表只在一个broker上有数据记录,一般值都大于1,代表一份数据会自动同步到其他的多个broker,防止某个broker宕机后数据丢失。
    partitions一个topic可以被切分成多个partitions,一个消费者可以消费多个partitions,但一个partitions只能被一个消费者消费,所以增加partitions可以增加消费者的吞吐量。kafka只保证一个partitions内的消息是有序的,多个一个partitions之间的数据是无序的。

    查看"test5"主题详情

    bin/kafka-topics.sh --describe --zookeeper  192.168.6.56:2181 --topic test5

    test5 topic详情
  • 启动生产者、消费者

    启动生产者

    bin/kafka-console-producer.sh --broker-list 192.168.6.56:9092 --topic test5

    --broker-list : 值可以为broker集群中的一个或多个节点

    启动消费者(在新的ssh连接窗口)

    bin/kafka-console-consumer.sh --zookeeper 192.168.6.56:2181 --topic test5 --from-beginning

    --zookeeper : 值可以为zookeeper集群中的一个或多个节点

    我们可以发现,在生产者下输入一个消息,回车后可以在消费者下输出,说明我们集群搭建的没问题

    生产者和消费者
  • 模拟kafka broker集群某个节点宕机

    我们直接通过kill 进程来模拟

     

    再观察 生产者和消费者

    某个broker节点宕机后的生产者消费者

    我们可以发现,消费者出现了警告信息,但是依旧可以消费数据。

  • 模拟zookeeper集群某个节点宕机

    我们直接通过kill 进程来模拟

     

    再观察 生产者和消费者

    某个zookeeper节点宕机后的生产者和消费

    我们可以发现,消费者依旧可以消费数据。
    这就说明我们整个集群环境的搭建已经成功。

    注意一点,你启动消费者时在命令中只指定了一个zookeeper节点,且模拟zookeeper某个节点宕机时,你kill掉的正好又是这个节点。这种情况下你的消费者会不停的报警告信息,但是不影响消费信息。

文/heichong(简书作者)
原文链接:http://www.jianshu.com/p/dc4770fc34b6
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

kafka环境搭建2-broker集群+zookeeper集群(转)的更多相关文章

  1. kafka环境搭建及librdkafka测试

    kafka环境搭建及librdkafka测试 (2016-04-05 10:18:25)   一.kafka环境搭建(转自http://kafka.apache.org/documentation.h ...

  2. kafka环境搭建

    kafka环境搭建 for mac 对应qq群号:616961231 在之前的文章中, 有学习能力和兴趣爱好的同学,自己动手维护测试环境,丰衣足食是最好的办法,今天我们来讲讲kafka在mac上的安装 ...

  3. kafka环境搭建和使用(python API)

    引言 上一篇文章了解了kafka的重要组件zookeeper,用来保存broker.consumer等相关信息,做到平滑扩展.这篇文章就实际操作部署下kafka,用几个简单的例子加深对kafka的理解 ...

  4. windows下golang实现Kfaka消息发送及kafka环境搭建

    kafka环境搭建: 一.安装配置java-jdk (1)kafka需要java环境,安装java-jdk,下载地址:https://www.oracle.com/technetwork/java/j ...

  5. spark集群搭建(三台虚拟机)——zookeeper集群搭建(3)

    !!!该系列使用三台虚拟机搭建一个完整的spark集群,集群环境如下: virtualBox5.2.Ubuntu14.04.securecrt7.3.6_x64英文版(连接虚拟机) jdk1.7.0. ...

  6. 第八章 搭建hadoop2.2.0集群,Zookeeper集群和hbase-0.98.0-hadoop2-bin.tar.gz集群

    安装配置jdk,SSH 一.首先,先搭建三台小集群,虚拟机的话,创建三个 下面为这三台机器分别分配IP地址及相应的角色:集群有个特点,三台机子用户名最好一致,要不你就创建一个组,把这些用户放到组里面去 ...

  7. 【入门教程】kafka环境搭建以及基础教程

    问题导读 1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic.发送消息.消费消息?3.如何书写Kafka程序?4.数据传输的事务定义有哪三种?5.Kafka判断一个节点是否活着有 ...

  8. windows kafka 环境搭建踩坑记

    版本介绍(64位): Windows 10 JDK1.8.0_171 zookeeper-3.4.8/ kafka_2.11-0.10.0.1.tgz 点击链接进行下载 1. JDK安装和环境搭建 自 ...

  9. SolrCloud(solr集群+zookeeper集群)

    一.集群介绍 1.  什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引 ...

随机推荐

  1. win7下安装 WINDRIVER.TORNADO.V2.2.FOR.ARM

    [风河VxWorks].WINDRIVER.TORNADO.V2.2.FOR.ARM下载 http://115.com/file/dlfo8zpy http://115.com/file/c4r01l ...

  2. js图片实现延迟加载

    <script type="text/javascript"> function delayload(option){ //读取参数 //图片未加载时显示的图片 var ...

  3. [codevs3295]落单的数

    题目描述 Description 有n个数(n是奇数),其中n-1个数两两成对,有1个数落单,找出这个数.要求O(n)的时间复杂度,O(1)的空间复杂度 输入描述 Input Description ...

  4. oracle rac IP详解

    rac环境下vip/public/private IP的区别 每个节点要2块网卡, 3个IP,虚拟IP或者叫做业务IP,单个网卡当掉可以“漂”到其他网卡是继续提供服务 在Oracle RAC环境下,每 ...

  5. bzoj 2707 [SDOI2012]走迷宫(SCC+高斯消元)

    Description Morenan被困在了一个迷宫里.迷宫可以视为N个点M条边的有向图,其中Morenan处于起点S,迷宫的终点设为T.可惜的是,Morenan非常的脑小,他只会从一个点出发随机沿 ...

  6. 【Java基础】Java中的持久属性集Properties

    Properties 类的介绍 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串.一个属性列表可包含另一个属性列 ...

  7. HDU1671 - Phone List(Trie树)

    题目大意 给定一些电话号码,判断是否有电话号码是其他电话号码的前缀 题解 裸Trie树嘛~~~~只需要一个插入过程即可,假设X是Y的前缀,在插入的过程中有两种情况,X在Y之前插入,那么在插入Y的时候经 ...

  8. poj 2325 Persistent Numbers (贪心+高精度)

    把输入数字每次从9-2除,能整除则记录该数字,最后从小到大输出. 应该算是水题,不过窝第一次写高精度除法,虽然1A,不过中间改了好多次. /****************************** ...

  9. redis 操作记录

    cd opt/redis-3.2.1/ cd src ./redis-cli get token:xxx del token:xxx set token:xxx

  10. java初学的几个问题

    1. 请问配置JDK时环境变量path和JAVA_HOME的作用是什么? 作用:告诉操作系统编译器运行的路径和生成的类路径.这样java源程序才可以进行编译和运行. 以下4-7题请在JDK环境下编译和 ...