安装部署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:客户端连接端口
tickTime:Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳,单位毫秒。
initLimit:Zookeeper的Leader 接受客户端(Follower)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10个心跳的时间(也就是tickTime)长度后 Zookeeper服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒
syncLimit:表示 Leader 与 Follower 之间发送消息时请求和应答时间长度,最长不能超过多少个tickTime 的时间长度,总的时间长度就是 5*2000=10秒。
server.A=B:C:D
其中A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的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来实现
- 【KafKa系列】KafKa安装部署
- Kafka安装部署
- kafka简单安装部署
- Kafka安装部署
- kafka安装部署
- 安装部署kafka
- Kafka安装及部署
- kafka 安装部署
- Kafka安装及部署
- Kafka安装及部署
- Kafka安装部署
- kafka安装及部署
- kafka安装部署
- kafka的安装部署
- kafka安装部署
- kafka安装部署
- 【Apache KafKa系列之一】KafKa安装部署
- kafka管理器kafka-manager部署安装
- BZOJ 3747: [POI2015]Kinoman
- android studio 升级2.2.2后jenkins编译问题
- 参数模板动态隐藏下拉框
- java 内部类
- 【知识整理】javascript基础语法总结(8)——Date
- 安装部署kafka
- LW/PH
- 在PHP语言中使用JSON
- Windows下Python3.5安装pygame1.9
- 分享给新手程序员
- Waiting in Line
- XStream
- iOS开发小技巧(持续更新中)
- RocketMQ与Kafka对比(18项差异)