原文地址: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. We're Hiring A Software Tester

    测试人员的基本修养: 代码编写,不可或缺 乔布斯说:Design is not just what it looks like and feel like,design is how it works ...

  2. Oracle.ManagedDataAccessDTC.dll 使用

    ODP.NET, Managed Driver Setup This section explains the setup and configuration steps required for u ...

  3. web测试中,各类web控件测试点总结

    一 .界面检查 进入一个页面测试,首先是检查title,页面排版,字段等,而不是马上进入文本框校验 1.页面名称title是否正确 2.当前位置是否可见  您的位置:xxx>xxxx 3.文字格 ...

  4. 【转】Getting xrdp to work on CentOS 6.4

    vi /etc/selinux/config SELINUX=disabled reboot Step 1: #rpm -Uvh http://pkgs.repoforge.org/rpmforge- ...

  5. vxworks一个超级奇怪的错误(parse error before `char')

    void tserver(int id) { if(debug){ useResource(,id);} char msgBuf[MAX_MSG_LEN]; if (msgQReceive(myMsg ...

  6. The Moving Points

    Problem Description There are N points in total. Every point moves in certain direction and certain ...

  7. 归并排序 求逆序数 链表的归并排序 多线程归并排序 java

    import java.util.Scanner; public class Main { private static int count=0; public static void mergeso ...

  8. Java笔记(二十六)……IO流上 字节流与字符流

    概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...

  9. 动态链接库(DLL)的使用

    2013-07-04 http://blog.csdn.net/blpluto/article/details/5715182 感觉挺好,推荐去看看.

  10. 关于VNC黑屏的问题

    注意: 1.vncserver启动后生成的ID号(1,2,3)要和VNCview里面填入的 ip:ID要保持一致  不然看到的就是黑屏 比如:vncserver启动后 产生: localhost.lo ...