`

Kafka 0.9+Zookeeper3.4.6集群搭建、配置,新版Java Client的使用要点,高可用性测试,以及各种坑(一)

阅读更多

Kafka 0.9版本对java client的api做出了较大调整,本文主要总结了Kafka 0.9在集群搭建、高可用性、新API方面的相关过程和细节,以及本人在安装调试过程中踩出的各种坑。

 

关于Kafka的结构、功能、特点、适用场景等,网上到处都是,我就不再赘述了,直接进入正文

 

Kafka 0.9集群安装配置

 

操作系统:CentOS 6.5

 

 

1. 安装Java环境

    Zookeeper和Kafka的运行都需要Java环境,所以先安装JRE,Kafka默认使用G1垃圾回收器,如果不更改垃圾回收器,官方推荐使用7u51以上版本的JRE。如果你使用老版本的JRE,需要更改Kafka的启动脚本,指定G1以外的垃圾回收器。

    Java环境的安装过程在此不赘述了。

 

 

2. Zookeeper集群搭建

    Kafka依赖Zookeeper管理自身集群(Broker、Offset、Producer、Consumer等),所以先要安装Zookeeper。自然,为了达到高可用的目的,Zookeeper自身也不能是单点,接下来就介绍如何搭建一个最小的Zookeeper集群(3个zk节点)

    此处选用Zookeeper的版本是3.4.6,此为Kafka0.9中推荐的Zookeeper版本。

   

    首先解压

tar -xzvf zookeeper-3.4.6.tar.gz

 

    进入zookeeper的conf目录,将zoo_sample.cfg复制一份,命名为zoo.cfg,此即为Zookeeper的配置文件

 

cp zoo_sample.cfg zoo.cfg

 

    编辑zoo.cfg

# 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
# the directory where the snapshot is stored.
dataDir=/data/zk/zk0/data
dataLogDir=/data/zk/zk0/logs
# the port at which the clients will connect
clientPort=2181
server.0=10.0.0.100:4001:4002
server.1=10.0.0.101:4001:4002
server.2=10.0.0.102:4001:4002

 

 

  • dataDir和dataLogDir的路径需要在启动前创建好
  • clientPort为zookeeper的服务端口
  • server.0/1/2为zk集群中三个node的信息,定义格式为hostname:port1:port2,其中port1是node间通信使用的端口,port2是node选举使用的端口,需确保三台主机的这两个端口都是互通的

    在另外两台主机上执行同样的操作,安装并配置zookeeper

    分别在三台主机的dataDir路径下创建一个文件名为myid的文件,文件内容为该zk节点的编号。例如在第一台主机上建立的myid文件内容是0,第二台是1。

 

    接下来,启动三台主机上的zookeeper服务:

bin/zkServer.sh start

    3个节点都启动完成后,可依次执行如下命令查看集群状态:

bin/zkServer.sh status

    命令输出如下:

    Mode: leader 或 Mode: follower

    3个节点中,应有1个leader和两个follower

 

 

    验证zookeeper集群高可用性:

    假设目前3个zk节点中,server0为leader,server1和server2为follower

    我们停掉server0上的zookeeper服务:

bin/zkServer.sh stop

    再到server1和server2上查看集群状态,会发现此时server1(也有可能是server2)为leader,另一个为follower。

 

    再次启动server0的zookeeper服务,运行zkServer.sh status检查,发现新启动的server0也为follower

    至此,zookeeper集群的安装和高可用性验证完成。

 

    附:Zookeeper默认会将控制台信息输出到启动路径下的zookeeper.out中,显然在生产环境中我们不能允许Zookeeper这样做,通过如下方法,可以让Zookeeper输出按尺寸切分的日志文件:

    修改conf/log4j.properties文件,将

    zookeeper.root.logger=INFO, CONSOLE

    改为

    zookeeper.root.logger=INFO, ROLLINGFILE

    修改bin/zkEnv.sh文件,将

    ZOO_LOG4J_PROP="INFO,CONSOLE"

    改为

    ZOO_LOG4J_PROP="INFO,ROLLINGFILE"

    然后重启zookeeper,就ok了

 

 

3. Kafka集群搭建

    此例中,我们会安装配置一个有两个Broker组成的Kafka集群,并在其上创建一个两个分区的Topic

    本例中使用Kafka最新版本0.9.0.1

 

    首先解压

tar -xzvf kafka_2.11-0.9.0.1.tgz

    编辑config/server.properties文件,下面列出关键的参数

 

#此Broker的ID,集群中每个Broker的ID不可相同
broker.id=0
#监听器,端口号与port一致即可
listeners=PLAINTEXT://:9092
#Broker监听的端口
port=9092
#Broker的Hostname,填主机IP即可
host.name=10.0.0.100
#向Producer和Consumer建议连接的Hostname和port(此处有坑,具体见后)
advertised.host.name=10.0.0.100
advertised.port=9092
#进行IO的线程数,应大于主机磁盘数
num.io.threads=8
#消息文件存储的路径
log.dirs=/data/kafka-logs
#消息文件清理周期,即清理x小时前的消息记录
log.retention.hours=168
#每个Topic默认的分区数,一般在创建Topic时都会指定分区数,所以这个配成1就行了
num.partitions=1
#Zookeeper连接串,此处填写上一节中安装的三个zk节点的ip和端口即可
zookeeper.connect=10.0.0.100:2181,10.0.0.101:2181,10.0.0.102:2181

 

 

    配置项的详细说明请见官方文档:http://kafka.apache.org/documentation.html#brokerconfigs

 

    此处的坑:

按照官方文档的说法,advertised.host.name和advertised.port这两个参数用于定义集群向Producer和Consumer广播的节点host和port,如果不定义的话,会默认使用host.name和port的定义。但在实际应用中,我发现如果不定义advertised.host.name参数,使用Java客户端从远端连接集群时,会发生连接超时,抛出异常:org.apache.kafka.common.errors.TimeoutException: Batch Expired

经过debug发现,连接到集群是成功的,但连接到集群后更新回来的集群meta信息却是错误的:
能够看到,metadata中的Cluster信息,节点的hostname是iZ25wuzqk91Z这样的一串数字,而不是实际的ip地址10.0.0.100和101。iZ25wuzqk91Z其实是远端主机的hostname,这说明在没有配置advertised.host.name的情况下,Kafka并没有像官方文档宣称的那样改为广播我们配置的host.name,而是广播了主机配置的hostname。远端的客户端并没有配置hosts,所以自然是连接不上这个hostname的。要解决这一问题,把host.name和advertised.host.name都配置成绝对的ip地址就可以了。


 

    接下来,我们在另一台主机也完成Kafka的安装和配置,然后在两台主机上分别启动Kafka:

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

 

    此处的坑:

官方给出的后台启动kafka的方法是:
bin/kafka-server-start.sh config/server.properties & 

    但用这种方式启动后,只要断开Shell或登出,Kafka服务就会自动shutdown,不知是OS的问题还是SSH的问题还是Kafka自己的问题,总之我改用-daemon方式启动Kafka才不会在断开shell后自动shutdown。


 

    接下来,我们创建一个名为test,拥有两个分区,两个副本的Topic:

bin/kafka-topics.sh --create --zookeeper 10.0.0.100:2181,10.0.0.101:2181,10.0.0.102:2181 --replication-factor 2 --partitions 2 --topic test

 

    创建完成后,使用如下命令查看Topic状态:

bin/kafka-topics.sh --describe --zookeeper 10.0.0.100:2181,10.0.0.101:2181,10.0.0.102:2181 --topic test

 

    输出:

Topic:test PartitionCount:2 ReplicationFactor:2 Configs:
     Topic: test Partition: 0 Leader: 1 Replicas: 1,0 Isr: 0,1
     Topic: test Partition: 1 Leader: 0 Replicas: 0,1 Isr: 0,1

 

    解读:test这个topic,当前有2个分区,分别为0和1,分区0的Leader是1(这个1是broker.id),分区0有两个Replica(副本),分别是1和0,这两个副本中,Isr(In-sync)的是0和1。分区2的Leader是0,也有两个Replica,同样也是两个replica都是in-sync状态

 

 

 

至此,Kafka 0.9集群的搭建工作就完成了,下一节中,我们将介绍新的Java API的使用,以及集群高可用性的验证测试。

 

至下一节的传送门

 

 

  • 大小: 7.3 KB
分享到:
评论

相关推荐

    kafka+zookeeper高可用集群搭建shell使用脚本

    【标题】"kafka+zookeeper高可用集群搭建shell使用脚本"所涉及的知识点主要集中在构建高可用的Kafka和Zookeeper集群上,以及如何利用Shell脚本来自动化这个过程。Kafka是一个分布式流处理平台,而Zookeeper是Apache...

    ELK+Filebeat+Kafka+ZooKeeper构建日志分析平台

    ELK+Filebeat+Kafka+ZooKeeper构建日志分析平台,架构图解

    集群环境搭建-Centos+kafka+zookeeper+hadoop+Spark

    通过VirtualBox安装多台虚拟机,实现集群环境搭建。 优势:一台电脑即可。 应用场景:测试,学习。...内附百度网盘下载地址,有hadoop+zookeeper+spark+kafka等等·····需要的安装包和配置文件

    zookeeper linux集群搭建流程

    ZooKeeper 的高可用性和高性能使其成为分布式系统的优选解决方案。 ZooKeeper Linux 集群搭建流程可以分为四步:下载和解压 ZooKeeper、创建目录和 myid 文件、修改 ZooKeeper 启动配置文件、启动 ZooKeeper 节点。...

    centos7下Redis哨兵集群和kafka集群和zookeeper集群搭建

    centos7下Redis哨兵集群和kafka集群和zookeeper集群搭建 http://blog.csdn.net/gaowenhui2008/article/details/71516901 https://cwiki.apache.org/confluence/display/KAFKA/Clients

    徐老师大数据培训Hadoop+HBase+ZooKeeper+Spark+Kafka+Scala+Ambari

    根据提供的标题、描述、标签及部分内容链接,我们可以推断出这是一个关于大数据技术栈的培训课程,涉及的技术包括Hadoop、HBase、Zookeeper、Spark、Kafka、Scala以及Ambari。下面将针对这些技术进行详细的介绍和...

    kafka+zookeeper.zip

    标题中的"kafka+zookeeper.zip"表明这是一个关于Apache Kafka和Zookeeper的组合包,通常用于构建高效的消息队列系统,尤其在大数据处理场景中。Apache Kafka是一个分布式流处理平台,而Zookeeper是一个分布式协调...

    kafka2.4.0+zookeeper+kafka-connect集成环境包

    标题中的“kafka2.4.0+zookeeper+kafka-connect集成环境包”指的是一个包含了Apache Kafka 2.4.0版本、ZooKeeper以及Kafka Connect的完整集成环境。这个安装包是为了方便用户一次性安装和配置这三个关键组件,用于...

    spark环境安装(Hadoop HA+Hbase+phoneix+kafka+flume+zookeeper+spark+scala)

    本项目旨在搭建一套完整的Spark集群环境,包括Hadoop HA(高可用)、HBase、Phoenix、Kafka、Flume、Zookeeper以及Scala等多个组件的集成。这样的环境适用于大规模的数据处理与分析任务,能够有效地支持实时数据流...

    spring+zookeeper+kafka

    Spring Kafka是Spring官方提供的一个模块,它允许开发者在Spring应用中轻松地使用Kafka,提供了生产者和消费者的API,以及对Kafka特性的支持,如分区策略和幂等性。 整合Spring、Zookeeper和Kafka的关键步骤如下: ...

    zookeeper、kafka集群部署

    zookeeper配置、集群部署 kafka配置、集群部署 Window平台下

    kafka+zookeeper

    具体来说,Zookeeper存储了Kafka的Broker信息、Topic的分区信息和副本分配等,确保了Kafka的高可用性和一致性。 zookeeper-3.3.6.tar.gz这个文件是Zookeeper的3.3.6版本源码包,包含了Zookeeper服务器端和客户端的...

    centos7下kafka和zookeeper和Redis集群搭建.zip

    本教程将详述如何在CentOS7操作系统中搭建Kafka、Zookeeper和Redis的集群环境,以实现高效、稳定的分布式数据处理和存储。 **Zookeeper简介** Apache ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,...

    Hadoop+Hive+Spark+Kafka+Zookeeper+Flume+Sqoop+Azkaban+Scala

    基于 Zookeeper 搭建 Hadoop 高可用集群 二、Hive 简介及核心概念 Linux 环境下 Hive 的安装部署 CLI 和 Beeline 命令行的基本使用 常用 DDL 操作 分区表和分桶表 视图和索引 常用 DML 操作 数据查询详解 三、Spark ...

    zookeeper-3.4.6.zip

    - **一致性**:Zookeeper 提供了一致性模型,所有客户端看到的数据视图是一致的,确保了数据的高可用性。 - **原子性**:所有的操作(如读取和写入)都是原子的,即要么成功,要么失败,不存在部分执行的情况。 ...

    Linux下的Kafka+Zookeeper使用以及配置

    总的来说,掌握Linux下Kafka和Zookeeper的安装、配置和使用是构建高可用、高性能的数据流平台的基础。这需要对分布式系统、Java编程以及相关的数据处理概念有一定的了解。通过实践和不断学习,你可以熟练地利用Kafka...

    kafka0.8.1+zookeeper3.4.9+storm0.9.1

    搭建storm+kafka+zookeeper环境所需要的三个环境组件,里面的参数已经配置完成,你只需要把对应的集群的ipHost换成你搭建的ip即可,已经成功搭建并测试,如果有疑问可以访问本人的博客,里面有详细的配置可供参考

    kafka+zookeeper+简单demo

    Kafka是一种高吞吐量、低延迟的分布式消息系统,而ZooKeeper则是一个集中式服务,用于分布式应用程序的配置管理、命名服务、集群同步等。在这个"Kafka + ZooKeeper + 简单demo"中,我们将深入理解这两个工具的结合...

    windows下安装kafka需要的zookeeper-3.4.6

    在Windows环境下搭建Kafka之前,首先需要安装Zookeeper,因为Zookeeper是Kafka的重要组成部分,它作为分布式协调服务,为Kafka提供了集群管理和数据一致性保障。Zookeeper-3.4.6是Apache ZooKeeper的一个稳定版本,...

Global site tag (gtag.js) - Google Analytics