kafka设置群集 必要前提:zookeeper的集群是正常。
准备三台虚拟机
确定 三台主机IP
1.2 zookeeper 搭建zookeeper的集群
1.2.1. . zookeeper的配置文件 zoo.cfg
每个文件都加入如下内容
server.1=192.168.25.131:2888:3888
server.2=192.168.25.164:2888:3888
server.3=192.168.25.165:2888:3888
1.2.2 为每个zookeeper创建data目录下面
在zoo.cfg的配置文件中由:dataDir=/opt/zookeeper/zookeeperData
指定的myid文件 内容就是对应的server.1 .后边的名字 1 2 3
[root@localhost Desktop]# cd /opt/zookeeper-3.4.9/zookeeperData/
[root@localhost data]# echo “1”>myid
文件中的内容就是 1或者2或者3—>
echo “1”>/opt/zookeeper/zookeeperData/myid
echo “2”>/opt/zookeeper/zookeeperData/myid
echo “3”>/opt/zookeeper/zookeeperData/myid
2.修改kafka集群配置
listeners=PLAINTEXT://192.168.25.131:9092
host.name=192.168.25.131
2.1 第一台机器:192.168.73.200
修改 server.properties
2.1.1 进入kafka的config目录
2.1.1.1 vim server.properties
修改内容如下:
broker.id=0
num.partitions=3
listeners=PLAINTEXT://192.168.25.131:9092
zookeeper.connect=192.168.25.131:2181,192.168.25.164:2181,192.168.25.165:2181
host.name=192.168.25.131
配置过了
log.dirs/usr/local/kafka/kafka-0-logs
2.2 第二台机器:192.168.73.201
修改 server.properties
2.2.1 进入kafka的config目录
2.2.1.1 vim server.properties
修改内容如下:
broker.id=1 #保证每个broker唯一,为1
num.partitions=3 #分区数量一般与broker保持一致
listeners=PLAINTEXT://192.168.73.201:9092 #修改为本机ip
zookeeper.connect=192.168.73.200:2181,192.168.73.201:2181,192.168.73.202:2181
#配置三台服务zookeeper连接地址
host.name=192.168.73.201
#新增host.name值,分别设为不同的值(3台机器根据自己的ip设置)
log.dirs==/usr/local/kafka/kafka-0-logs #修改log.dirs目录为之前自定义的目录
2.2.2 克隆的原因导致 原有第一台克隆的kafka 的日志文件中有一个meta.properties broker.id=0; 修改为 当前kakfa的server.properties broker.id=1;
/usr/local/kafka/kafka-0-logs/meta.properties
vim meta.properties
broker.id=1
提示:
[root@localhost Desktop]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
[root@localhost Desktop]# vim /usr/local/kafka/config/server.properties
[root@localhost Desktop]# vim /usr/local/kafka/kafka-0-logs/meta.properties
2.3 第三台机器:192.168.73.202
修改 server.properties
2.3.1 进入kafka的config目录
2.3.1.1 vim server.properties
修改内容如下:
broker.id=2 #保证每个broker唯一,为2
num.partitions=3 #分区数量一般与broker保持一致
listeners=PLAINTEXT://192.168.73.202:9092 #修改为本机ip
zookeeper.connect=192.168.73.200:2181,192.168.73.201:2181,192.168.73.202:2181
#配置三台服务zookeeper连接地址
host.name=192.168.73.201 #新增host.name值,分别设为不同的值(3台机器根据自己的ip设置)
log.dirs==/usr/local/kafka/kafka-0-logs #修改log.dirs目录为之前自定义的目录
2.3.2 克隆的原因导致 原有第一台克隆的kafka 的日志文件中有一个meta.properties broker.id=0; 修改为 当前kakfa的server.properties broker.id=2;
/usr/local/kafka/kafka-0-logs/meta.properties
vim meta.properties
broker.id=2
3.演示:
第一步,启动三台电脑上的zookeeper
[root@localhost kafka] zkServer.sh start
第二步,启动三台电脑上的kafka
[root@localhost~]# /opt/kafka_2.11-1.0.0/bin/kafka-server-start.sh /opt/kafka_2.11-1.0.0/config/server.properties
第三步:集群创建主题:/opt/kafka_2.11-1.0.0/bin/kafka-topics.sh -create --zookeeper 192.168.25.131:2181,192.168.25.164:2181,192.168.25.165:2181 -replication-factor 3 --partitions 3 --topic gaofei
第四步:集群查看主题:/opt/kafka_2.11-1.0.0/bin/kafka-topics.sh -list --zookeeper 192.168.25.131:2181
第五步:集群生产者:/opt/kafka_2.11-1.0.0/bin/kafka-console-producer.sh --broker-list 192.168.25.131:9092,192.168.25.164:9092,192.168.25.165:9092 --topic gaofei
发送数据
第六步:集群消费者:/opt/kafka_2.11-1.0.0/bin/kafka-console-consumer.sh --bootstrap-server 192.168.25.131:9092,192.168.25.164:9092,192.168.25.165:9092 --topic gaofei --from-beginning
在另外两台电脑上运行消费者,看是否接受到了消息
1.server.properties
#broker的全局唯一编号,不能重复
broker.id=0
#用来监听链接的端口,producer或consumer将在此端口建立连接
port=9092
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘IO的现成数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接受套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#kafka运行日志存放的路径
log.dirs=/export/servers/logs/kafka
#topic在当前broker上的分片个数
num.partitions=2
#用来恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1
#segment文件保留的最长时间,超时将被删除
log.retention.hours=168
#滚动生成新的segment文件的最大时间
log.roll.hours=168
#日志文件中每个segment的大小,默认为1G
log.segment.bytes=1073741824
#周期性检查文件大小的时间
log.retention.check.interval.ms=300000
#日志清理是否打开
log.cleaner.enable=true
#broker需要使用zookeeper保存meta数据
zookeeper.connect=zk01:2181,zk02:2181,zk03:2181
#zookeeper链接超时时间
zookeeper.connection.timeout.ms=6000
#partion buffer中,消息的条数达到阈值,将触发flush到磁盘
log.flush.interval.messages=10000
#消息buffer的时间,达到阈值,将触发flush到磁盘
log.flush.interval.ms=3000
#删除topic需要server.properties中设置delete.topic.enable=true否则只是标记删除
delete.topic.enable=true
#此处的host.name为本机IP(重要),如果不改,则客户端会抛出:Producer connection to localhost:9092 unsuccessful 错误!
host.name=kafka01
advertised.host.name=192.168.239.128
2.producer.properties
#指定kafka节点列表,用于获取metadata,不必全部指定
metadata.broker.list=kafka01:9092,kafka02:9092,kafka03:9092
#partitioner.class=kafka.producer.DefaultPartitioner
compression.codec=none
serializer.class=kafka.serializer.DefaultEncoder
#compressed.topics=
request.required.acks=0
request.timeout.ms=10000
也意味着消息将会在本地buffer中,并适时批量发送,但是也可能导致丢失未发送过去的消息
producer.type=sync
queue.buffering.max.ms = 5000
queue.buffering.max.messages=20000
batch.num.messages=500
queue.enqueue.timeout.ms=-1
message.send.max.retries=3
topic.metadata.refresh.interval.ms=60000
3.consumer.properties
zookeeper.connect=zk01:2181,zk02:2181,zk03:2181
zookeeper.session.timeout.ms=5000
#当消费者挂掉,其他消费者要等该指定时间才能检查到并且触发重新负载均衡
zookeeper.connection.timeout.ms=10000
zookeeper.sync.time.ms=2000
#指定消费
group.id=itcast
auto.commit.enable=true
auto.commit.interval.ms=1000
conusmer.id=xxx
client.id=xxxx
queued.max.message.chunks=50
rebalance.max.retries=5
fetch.min.bytes=6553600
fetch.wait.max.ms=5000
socket.receive.buffer.bytes=655360
auto.offset.reset=smallest
derializer.class=kafka.serializer.DefaultDecoder