安装部署kafka

来源:互联网 发布:怎样做一个淘宝客 编辑:程序博客网 时间:2024/04/28 12:06
说明:本博客是对学习安装部署kafka的总结,某些资源来自互联网,如有雷同,纯属引用参考。

1 zookeeper集群安装部署

      由于zookeeper集群的投票选举机制,集群机器数量必须是单数,这里以三台机器作为一个集群为例。假设这三台机器的IP分别是:172.30.1.20、172.30.1.21、172.30.1.22。

      用域名代替IP访问,修改/etc/hosts文件,新增内容:

172.30.1.20 zookeeper01

172.30.1.21 zookeeper02

172.30.1.22 zookeeper03

 

 

 

 

 

 


1.1 安装

      这里安装在/opt目录下,执行以下命令:

cp/usr/local/src/zookeeper-3.4.6.tar.gz /opt

cd /opt

tar -zxvfzookeeper-3.4.6.tar.gz

ln -s /opt/zookeeper-3.4.6 /opt/zookeeper

 

1.2 配置

      ●配置zookeeper的配置文件

cp/opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg

      需要分配两个目录,一个为zookeeper的数据目录,一个用于日志目录。这里创建两个新的目录:

mkdir /opt/zookeeper/data

mkdir /opt/zookeeper/logs

cd/opt/zookeeper

vim./conf/zoo.cfg,修改配置项如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper/data
dataLogDir=/opt/zookeeper/logs
clientPort=2181
server.1=zookeeper01:2888:3888
server.2=zookeeper02:2888:3888
server.3=zookeeper03:2888:3888
 

 

 

 

 

 

 

 

 

 


配置项解释

dataDir:数据目录,即数据持久化的目录

dataLogDir:日志目录

clientPort:客户端连接端口

tickTimeZookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳,单位毫秒。

initLimitZookeeperLeader 接受客户端(Follower)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10个心跳的时间(也就是tickTime)长度后 Zookeeper服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 

syncLimit:表示 Leader  Follower 之间发送消息时请求和应答时间长度,最长不能超过多少个tickTime 的时间长度,总的时间长度就是 5*2000=10秒。

server.A=BCD

       其中是一个数字,表示这个是第几号服务器;是这个服务器的 ip 地址;表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;表示的是万一集群中的Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

       (如果部署在同一台机器上,可以采用伪集群的配置方式,即 B 都是一样,不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。)

●新增myid文件

      # cd /opt/zookeeper/data

      #vim myid

      在data目录下创建文件,文件名为“myid”,编辑该“myid”文件,输入对应的编号,这个代表着该节点机器的编号。如在172.30.1.20上,“myid”文件内容就是1,在172.30.1.21上,内容就是2,在172.30.1.22,内容就是3。  若有更多依此类推。

1.3 启动与停止

启动:

/opt/zookeeper/bin/zkServer.shstart

 

停止:

/opt/zookeeper/bin/zkServer.shstop

 

重启:
/opt/zookeeper/bin/zkServer.sh restart

 

检查启动后状态
# /opt/zookeeper/bin/zkServer.sh status

( 可能需要安装nc包  # yum install nc )

      若启动成功,节点的状态是leader或者follower。

 

修改防火墙

如果是用iptable的话,在/etc/sysconfig/iptables中加入ZooKeeper的端口:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 2181 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 2888 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 3888 -j ACCEPT

 

 

 

 

 


 执行防火墙重启命令:
# service iptables restart

 

客户端登陆
#/opt/zookeeper/bin/zkCli.sh-server 127.0.0.1:2181


 

1.4 zookeeper c client install

cd /opt/zookeeper/src/c

(  非必需项,若没安装以下就需要安装:

yum install -ycppunit-devel

ACLOCAL="aclocal-I /usr/share/aclocal" autoreconf -if

/usr/share/aclocal是cppunit.m4所在的路径

)

./configure

make

make install


 

2 kafka集群安装部署

      以三台机器作为一个集群为例。假设这三台机器的IP分别是:172.30.1.20、172.30.1.21、172.30.1.22。假设这三台机器的主机名分别为kafka01,kafka02,kafka03,注意:主机名只能用英文字母、数字、“-”,不能使用下划线“_”,会出现问题。  

      用域名代替IP访问,修改/etc/hosts文件,新增内容:

172.30.1.20 kafka01

172.30.1.21 kafka02

172.30.1.22 kafka03

 

 

 

 

 

 


2.1 安装

      这里安装在/opt目录,执行以下命令:

tar -zxvfkafka_2.11-0.10.0.0.gz -C /opt

 

2.2 配置

分配一个目录作为kafka的日志目录,这里新建目录

mkdir /opt/kafka_2.11-0.10.0.0/logs

cd /opt/kafka_2.11-0.10.0.0

vim config/server.properties

broker.id=0

listeners=PLAINTEXT://kafka01:9092

log.dirs=/opt/kafka_2.11-0.10.0.0/logs

zookeeper.connect= zookeeper01:2181, zookeeper02:2181, zookeeper03:2181

 

 

 

 

 

 

 

 


配置项解释

broker.id     kafkabroker节点的 编号,如在kafka01,broker.id=0,在kafka02,broker.id=1,在kafka03,broker.id=2。

listeners kafkabroker监听的主机和端口。

log.dirs       日志目录。

zookeeper.connect  zookeeper集群列表,多个的话用逗号隔开。

 

 

2.3 启动与停止

启动

 /opt/kafka_2.11-0.10.0.0/bin/kafka-server-start.sh /opt/kafka_2.11-0.10.0.0/config/server.properties&

 

停止

 /opt/kafka_2.11-0.10.0.0/bin/kafka-server-stop.sh

 

查看进程,端口

# ps -ef | grepkafka

# netstat-tunpl | grep java

zookeeper默认监听的端口:2181,3888 (3888 端口是zookeeper集群内部使用,还有     2888端口也作为内部使用)。

kafka默认监听端口:9092


 

2.4 安装kafka c/c++ client

下载地址:https://github.com/edenhill/librdkafka

下载源码包,执行以下命令

tar -zxvflibrdkafka-0.9.1.tar.gz -C /opt

cd /opt/librdkafka-0.9.1

./configure

make

make install

 

默认安装信息:

/usr/local/include/librdkafka/rdkafka.h

/usr/local/lib/librdkafka.so

/usr/local/include/librdkafka/rdkafkacpp.h

/usr/local/lib/librdkafka++.so

 

 


 

2.5 安装kafka php 客户端

php client使用源码:https://github.com/arnaud-lb/php-rdkafka

下载源码包,执行以下命令

tar -zxvfphp-rdkafka-0.9.1-php5.tar.gz -C /opt

cd/opt/php-rdkafka-0.9.1-php5/

/usr/bin/phpize

./configure

make

make install

echoextension=rdkafka.so | sudo tee -a /etc/php.ini

 

查看是否安装成功

/usr/bin/php-m | grep rdkafka

 

重启php-fpm

      若php-fpm已经启动,则重启php-fpm

      service php-fpm reload

      或者

      killall php-fpm

      php-fpm

 

 若安装时出现的错误:

ERROR:

/usr/include/php/ext/pcre/php_pcre.h:29:18:error: pcre.h: No such file or directory

解决方法:安装pcre库


 

2.6 简单测试kafka

2.6.1创建topic

连接zookeeper, 创建一个名为testtopic001的topic, replication-factor 和 partitions 都设置为3  

参数信息:Zookeeper的信息,复制因子,Topic的Partition数,Topic的名字。(注意:一个broker可以有一个topic的多个partition,但是一个topic的replication-factor复制因子必须小于等于集群的Broker数目)

[root@localhost~]# /opt/kafka_2.11-0.10.0.0/bin/kafka-topics.sh --create --zookeeperzookeeper01:2181 --replication-factor 3 --partitions 3 --topic testtopic001

Created topic "testtopic001".

[root@localhost~]#

 

查看已经创建的topic列表  

在172.30.1.20查看

[root@localhostkafka_2.11-0.10.0.0]# /opt/kafka_2.11-0.10.0.0/bin/kafka-topics.sh --list--zookeeper zookeeper01:2181

 

查看指定topic属性

[root@localhost~]# /opt/kafka_2.11-0.10.0.0/bin/kafka-topics.sh --describe --zookeeperzookeeper01:2181 --topic testtopic001

显示如下:

Topic:testtopic001     PartitionCount:3 ReplicationFactor:3   Configs:

      Topic: testtopic001  Partition: 0  Leader: 1    Replicas: 1,0,2        Isr: 1,0,2

      Topic: testtopic001  Partition: 1  Leader: 2    Replicas: 2,1,0        Isr: 2,1,0

      Topic: testtopic001  Partition: 2  Leader: 0    Replicas: 0,2,1        Isr: 0,2,1

 


 

2.6.2生产消息

生产者连接Kafka Broker发布一个消息  

下面可以直接输入生产的数据(生产消息时不需要指定Partition,Kafka自动做Partition路由,每个Partition都是有Lead Partition和Follower Partitions组成,Lead Partition负责读写,而Follower Partitions只做复制,在Lead Partition挂了之后,自动做Failover)

 

[root@localhostkafka_2.11-0.10.0.0]# /opt/kafka_2.11-0.10.0.0/bin/kafka-console-producer.sh--broker-list zookeeper01:9092 --topic testtopic001

hello,kafka!

^C[root@localhostkafka_2.11-0.10.0.0]#

 

2.6.3消费消息

消费者连接Zookeeper获取消息

[root@localhost~]# /opt/kafka_2.11-0.10.0.0/bin/kafka-console-consumer.sh --zookeeperzookeeper01:2181 --topic testtopic001 --from-beginning

hello,kafka!

^C

 [root@localhost ~]#

Consumers之间的负载均衡使用Zookeeper来实现

 

0 0