kafka 集群搭建过程及搭建问题处理

来源:互联网 发布:电脑点歌软件 编辑:程序博客网 时间:2024/06/14 17:27

文章目录

1、Kafka 简介2、Zookeeper 集群搭建3、Kafka 集群搭建4、Kafka 集群搭建问题记录

1、Kafka 简介

    Kafka是一个消息系统,由LinkedIn贡献给Apache 基金会,称为Apache 的一个顶级项目;Kafka对消息保存时根据 Topic进行归类,发送消息者成为Producer,消息接受者成为Consumer,无论是Kafka集群,还是Producer和consumer都依赖于 Zookeeper 来保证系统可用性。搭建 Kafka 集群环境要首先搭建 Zookeeper 集群。

Kafka集群搭建准备工作:

* 准备3台机器,IP地址分别为:192.168.1.184、192.168.1.203、192.168.1.208;其中有两台物理机一台虚拟机,192.168.1.208为虚拟机Centos系统,192.168.1.184、192.168.1.203为物理机ubuntu系统。* 下载kafka,当前版本为:kafka_2.11-0.9.0.1.tgz,将该文件拷贝到以上三台机器的安装目录,本次环境搭建目录:/home/shuzilm/Downloads/kafka_2.11-0.9.0.1/。* 安装java1.7,安装方式参考:http://www.centoscn.com/image-text/install/2014/0827/3585.htmlJava1.7的下载 地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html解压源码包通过终端在/usr/local目录下新建java文件夹,命令行:sudo mkdir /usr/local/java然后将下载到压缩包拷贝到java文件夹中,命令行:进入jdk源码包所在目录cp jdk-7u79-linux-x64.tar.gz /usr/local/java然后进入java目录,命令行:cd /usr/local/java解压压缩包,命令行:tar xvf jdk-7u79-linux-x64.tar.gz然后可以把压缩包删除,命令行:rm jdk-7u79-linux-x64.tar.gz设置jdk环境变量这里采用全局设置方法,就是修改etc/profile,它是是所有用户的共用的环境变量vi /etc/profile打开之后在末尾添加:export JAVA_HOME=/usr/local/java/jdk1.7.0_79export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/tools.jarexport PATH=$PATH:$JAVA_HOME/binexport JRE_HOME=/usr/local/java/jdk1.7.0_79/jreexport PATH=$PATH:$JRE_HOME/bin

请记住,在上述添加过程中,等号两侧不要加入空格,不然会出现“不是有效的标识符”,因为source /etc/profile 时不能识别多余到空格,会理解为是路径一部分。
然后保存,source /etc/profile,使profile生效。


2、Zookeeper 集群搭建

2.1、简介    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。    本文档使用的Zookeeper为Kafka_2.11-0.9.0.1自带版本。2.2、环境搭建(1)配置 /kafka_2.11-0.9.0.1/config/zookeeper.properties,配置内容如下所示:tickTime=2000dataDir=/srv/zookeeper/clientPort=2181initLimit=10syncLimit=5server.1=192.168.1.184:2888:3888server.2=192.168.1.203:2888:3888server.3=192.168.1.208:2888:3888然后,使用命令创建 Zookeeper 主机标识,每个主机标识不同,这里我们用1、2、3分别标识三台主机,本机标识为1,创建命令如下所示:echo “1” > myid最后,重复以上过程搭建另两台主机,完成后Zookeeper环境即搭建完毕。(2)启动Zookeeper集群:启动顺序:server.1、server.2、server.2。进入启动脚本目录 /srv/kafka/bin,然后使用启动脚本启动每台主机,启动命令:./zookeeper-server-start.sh ../config/zookeeper.properties &最后,使用上面命令分别启动另外两个主机,如无错误,Zookeeper即启动完成。搭建环境过程遇到问题,可参考本文档第4节的解决方式。停止zookeeper的命令:/srv/kafka/bin/zookeeper-server-stop.sh参考文档:http://www.cnblogs.com/davidwang456/p/4238536.html2.3、环境监测    Zookeepe环境搭建并启动,如何监测该集群的工作状态?这里使用nc命令进行状态监控,在任意一台Zookeeper主机上使用如下命令进行监控:echo stat | nc 192.168.1.184 2181命令返回:Zookeeper version: 3.4.6-1569965, built on 02/20/2014 09:09 GMTClients:/192.168.1.184:35620[0](queued=0,recved=1,sent=0)Latency min/avg/max: 0/4/117Received: 37394Sent: 37399Connections: 1Outstanding: 0Zxid: 0x10000e33fMode: followerNode count: 30echo stat | nc 192.168.1.203 2181命令返回:Zookeeper version: 3.4.6-1569965, built on 02/20/2014 09:09 GMTClients:/192.168.1.184:60265[0](queued=0,recved=1,sent=0)/192.168.1.184:54585[1](queued=0,recved=32586,sent=32587)/192.168.1.203:1842[1](queued=0,recved=32563,sent=32565)Latency min/avg/max: 0/1/297Received: 95473Sent: 95474Connections: 3Outstanding: 0Zxid: 0x10000e4bfMode: leader(注意该主机为Zookeeper集群的leader节点)Node count: 30echo stat | nc 192.168.1.208 2181命令返回:Zookeeper version: 3.4.6-1569965, built on 02/20/2014 09:09 GMTClients:/192.168.1.208:35836[1](queued=0,recved=32701,sent=32707)/192.168.1.184:46630[0](queued=0,recved=1,sent=0)Latency min/avg/max: 0/2/85Received: 61940Sent: 61945Connections: 2Outstanding: 0Zxid: 0x10000e55fMode: followerNode count: 30如无返回说明该Zookeeper主机存在问题。如Zookeeper集群中的节点均无问题代表集群搭建成功。参考文档:http://blog.csdn.net/hackerwin7/article/details/43559991

3、Kafka 集群搭建

3.1、环境搭建(1)配置 /srv/kafka/config/server.properties,配置内容如下所示:broker.id=201  (数字随便取,每个服务器id号唯一即可)port=9092listeners=PLAINTEXT://IP:9092advertised.host.name=IPlog.dirs=/data/log/kafka-logszookeeper.contact=192.168.1.184:2181,192.168.1.203:2181,192.168.1.208:2181其中,broker.id用来标识Kafka节群中单节点的,本环境分别使用201、202、203来标识集群中的3个节点的。Host.name为本机的ip地址在此版本中可以注销不用。最后,同样方式配置其他2个节点,完成后代表Kafka集群已搭建完毕。(2)Kafka集群启动启动顺序:server.1、server.2、server.2。进入启动脚本目录 /srv/kafka/bin,然后使用启动脚本启动每台主机,启动命令:./kafka-server-start.sh ../config/server.properties  &最后,使用上面命令分别启动另外两个主机,如无错误,Kafka集群即启动完成。搭建环境过程遇到问题,可参考本文档第4节的解决方式。停止kafka的命令:/srv/kafka/bin/kafka-server-stop.sh参考文档:http://www.cnblogs.com/davidwang456/p/4238536.html(3)集群外的ip作为客户端访问集群,需要先将该外部ip加入server.properties文件,如下所示:advertised.host.name=192.168.2.2523.2、应用测试(1)进入启动脚本目录 /srv/kafka/bin,创建Topic,命令如下:./kafka-topics.sh --create --zookeeper 192.168.1.203:2181 --replication-factor 2 --partitions 3 --topic mykafka_all_zk这里partitions一般设置与集群中kafka节点相同的数量,replication-factor一般为2,意义是每一个partitions有两个副本,一主一从互为热备(包含功能和数据)。(2)查看创建Topic信息,命令如下:./kafka-topics.sh --describe --zookeeper 192.168.1.203:2181 --topic mykafka_all_zk命令返回:Topic:mykafka_all_zk    PartitionCount:3    ReplicationFactor:2 Configs:Topic: mykafka_all_zk   Partition: 0    Leader: 132 Replicas: 132,133   Isr: 132,133Topic: mykafka_all_zk   Partition: 1    Leader: 133 Replicas: 133,134   Isr: 133,134Topic: mykafka_all_zk   Partition: 2    Leader: 134 Replicas: 134,132   Isr: 134Isr : kafka维护一个isr---可以跟上leader的列表。这个列表的单元才会选取leader. 这种方式可以容忍N-1的失败。复制因子和吞吐量的权衡。以上建立的topic,最后一个Isr 缺少一个副本,在第4节问题4中解决。http://www.tuicool.com/articles/FBZZRnu

4、Kafka 集群搭建问题记录(1)Kafka集群搭建问题,错误日志:Caused by: java.net.UnknownHostException: shuzilm: Name or service not known处理方法如下:修改配置文件/etc/hosts,加入如下内容:192.168.1.208 shuzilm注意该问题在192.168.1.208 虚拟Centos系统中发生,Ubuntu系统无该问题。(2)Zookeeper集群搭建问题,错误日志:missing election port for server该问题由于文件zookeeper.properties配置错误导致,处理方法如下:server.1=192.168.1.184.2888:3888 改为 server.1=192.168.1.184:2888:3888(3)Zookeeper集群环境监测(echo stat | nc 192.168.1.208 2181)无反应问题注意防火墙的关闭 service iptables stop,该问题在物理机上监测虚拟Centos系统Zookeeper主机时发生。(4)各种生产消费的报错:生产报错:WARN Error while fetching metadata with correlation id 41 : {=LEADER_NOT_AVAILABLE}消费报错:WARN [console-consumer-31807_shuzilm-1470397544037-f293512f-leader-finder-thread], Failed to add leader for partitions ERROR Error when sending message to topic   with key: null解决:server.properties 配置中listeners=PLAINTEXT://:9092 改为listeners=PLAINTEXT://本节点ip:9092上面问题解决过程曾关闭过ubuntu节点的防火墙,但关闭后问题未解决,不排出该操作与后面修改配置共同作用解决该问题的可能。参考:http://blog.csdn.net/kuluzs/article/details/51577678以上解决后,可以生产消费,但某节点消费时报错:[ConsumerFetcherThread-console-consumer-46869_shuzilm-1470451434898-37c43f8f-0-132], Error for partition [mykafka2,0] to broker 132:kafka.common.NotLeaderForPartitionException (kafka.consumer.ConsumerFetcherThread)解决:该问题由本小节配置问题导致建立的topic存在问题而引起,解决该问题后,新建的topic不存在该消费时报错的问题。备注:创建topic:./kafka-topics.sh --create --zookeeper 192.168.1.184:2181,192.168.1.208:2181,192.168.1.203:2181 --replication-factor 2 --partitions 3 --topic mykafka4生产:./kafka-console-producer.sh --broker-list 192.168.1.184:9092,192.168.1.203:9092,192.168.1.208:9092 --topic mykafka4消费:./kafka-console-consumer.sh --zookeeper 192.168.1.184:2181,192.168.1.203:2181,192.168.1.208:2181--topic mykafka4 --from-beginning
1 0
原创粉丝点击