kafka集群

单机设置见上一遍文件"kafka",之前使用的是单机,

配置zookeeper集群(3台)

cd /usr/local/kafka_2.13-2.5.0/config

vim zk.properties

内容如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper
clientPort=2181
#maxClientCnxns=0
admin.enableServer=false
server.1=192.168.0.30:2888:3888
server.2=192.168.0.31:2888:3888
server.3=192.168.0.32:2888:3888
4lw.commands.whitelist=*

server.1,server.2,server.3表示zookeeper群集对应的机器信息,其中server.后边的数字要跟dataDir设置的目录下的myid文件的值相同,如果文件不存在则新建

其中4lw.commands.whitelist是为了通过telnet方式查询指定机器的mode 信息

如telnet 192.168.0.30 2181

然后输入 stat

会返回0.30的stat信息

启动zookeeper(3台)

cd /usr/local/kafka_2.13-2.5.0

./bin/zookeeper-server-start.sh -daemon config/zk.properties

配置kafka集群(3台)

cd /usr/local/kafka_2.13-2.5.0/config

vim kafka1.properties

在上一遍的基础上修改broker.id,zookeeper.connection和zookeeper.connection.timeout.ms项:

broker.id=0

zookeeper.connect=192.168.0.30:2181,192.168.0.31:2181,192.168.0.32:2181

zookeeper.connection.timeout.ms=180000

其中broker.id的值如果原机器 上有数据需要保持broker.id的值不变,如果要变更broker.id则应该把对应的数据删除掉后才可启动成功,删除的文件在log.dirs=/tmp/kafka-logs对应的log.dirs目录里

三台配置主要区别在于broker.id

启动kafka(3台)

cd /usr/local/kafka_2.13-2.5.0

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

netstat -anp|grep 9092
端口存在 则表示 启动成功

在任意一台机器 上创建topic,在其它机器 里查看有同样的topic则表示集群正常,使用群集后记得topic的数据备份,只能启用了备份集群才可以当某一个机器宕机后,不影响正常访问。

./bin/kafka-topics.sh –create –zookeeper localhost:2181 –replication-factor 3 –partitions 3 –topic test

 

PHP使用的话跟单机使用相同,只要修改metadata.broker.list为多个值即可。

$conf->set('metadata.broker.list', '192.168.0.30:9092,192.168.0.31:9092,192.168.0.32:9092');
问题:
1. 连接zookeeper超时

kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection while in state: CONNECTING

这个问题的是由于kafka启动的时候连接zookeeper比较慢, 把超时时间设置大一点就可以了,默认是6000ms

server.properties中增加

zookeeper.connection.timeout.ms=6000000