kafka搭建的正确姿势

准备工作

1. java环境准备

2. zookeeper 下载(选择适合的版本)

wget -b https://archive.apache.org/dist/zookeeper/zookeeper-3.5.3-beta/zookeeper-3.5.3-beta.tar.gz

3. kafka下载(选择适合的版本)

wget -b https://archive.apache.org/dist/kafka/1.0.2/kafka_2.11-1.0.2.tgz

安装zookeeper

1. 解压软件包

tar -xvf zookeeper-3.5.3-beta.tar.gz
cd zookeeper-3.5.3-beta/conf
cp zoo_sample.cfg zoo.cfg #zoo.cfg是官方指定的文件命名规则
vim zoo.cfg

2. 修改zoo.cfg配置文件

# 这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。(单位:毫秒)
tickTime=2000
# 表示是参数 tickTime 值得10倍,必须配置,且需要配置一个正整数,不支持系统属性方式配置。
# 该参数用于配置 Leader 服务器等待 Follower 启动,并完成数据同步的时间。
# Follwer 服务器再启动过程中,会与 Leader 建立连接并完成对数据的同步,从而确定自己对外提供服务的其实状态。# Leader 服务器允许 Follower 在 initLimit 时间内完成这个工作。
# 通常情况下,运维人员不用太在意这个参数的配置,使用默认值即可。
# 但如果随着 ZooKeeper 集群管理的数据量增大,Follower 服务器再启动的时候,从 Leader 上进行同步数据的时间也会相应变长,于是无法在较短的时间完成数据同步。
# 因此,在这种情况下,有必要适当调大这个参数。[出处](https://www.jianshu.com/p/41aa82d68a7e)
# 通俗说投票选举新的leader的初始化时间
initLimit=10
# 这个配置项标识 Leader 与Follower 之间发送消息,请求和应答时间长度。
# 最长不能超过多少个 tickTime 的时间长度,总的时间长度就是5*2000=10秒
# 响应超时,Leader认为Follower“死掉”,从服务器列表中删除Follower
syncLimit=5
# 配置 ZooKeeper 事务日志的存储目录
dataDir=/home/dw/dev/data/zookeeper
# 这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
# 如需修改,请将端口改大点
clientPort=2181
# 用于配置 ZooKeeper 服务器存储事务日志文件的目录.
# 应该尽量将这两者的牧区区分开来.
dataLogDir=/home/dw/dev/data/zookeeper/log
# server.1 这个1是服务器的标识也可以是其他的数字, 表示这个是第几号服务器
# 用来标识服务器,这个标识要写到快照目录下面myid文件里
# 第一个端口是master和slave之间的通信端口,默认是2888
# 第二个端口是leader选举的端口,集群刚启动的时候选举或者leader挂掉之后进行新的选举的端口默认是3888
server.1=192.168.1.26:2888:3888
mkdir -p /home/dw/dev/data/zookeeper #创建dataDir路径
mkdir -p /home/dw/dev/data/zookeeper/log #创建dataLogDir路径
echo "1" > /home/dw/dev/data/zookeeper/myid #创建myid文件并写入1,表示1号服务器

启动zookeeper服务

./bin/zkServer.sh start #启动命令
./bin/zkServer.sh status #查看状态

kafka安装

解压软件包

tar -xvf kafka_2.11-1.0.2.tgz
cd kafka_2.11-1.0.2/config/
vim server.properties

修改server.properties

# 当前机器在集群中的唯一标识,和zookeeper的myid性质一样
broker.id=0
# broker 对外提供的服务入口地址
listeners=PLAINTEXT://:9092
# borker进行网络处理的线程数
num.network.threads=3
# borker进行I/O处理的线程数
num.io.threads=8
# 发送缓冲区buffer大小,数据不是一下子就发送的,先回存储到缓冲区了到达一定的大小后在发送,能提高性能
socket.send.buffer.bytes=102400
# 接收缓冲区大小,当数据到达一定大小后在序列化到磁盘
socket.receive.buffer.bytes=102400
# 向kafka请求消息或者向kafka发送消息的请请求的最大数,这个值不能超过java的堆栈大小(这里设置的为1G)
socket.request.max.bytes=104857600
# 消息存放的目录,这个目录可以配置为“,”逗号分割的表达式,意思是可以写多个目录
log.dirs=/home/dw/dev/data/kafka/kafka-logs
# 默认的分区数,一个topic默认1个分区数
num.partitions=1
# kafka broker启动的过程中会加载此节点上所有topic的log文件,如果数据量非常大会导致加载时间过长
# 可通过修改此值加快log的恢复速度,默认是1
num.recovery.threads.per.data.dir=1
# topic副本数量
# 对于开发测试以外的任何测试,建议使用大于1的值来确保可用性
offsets.topic.replication.factor=1
# 事务主题的副本数
transaction.state.log.replication.factor=1
# 覆盖事务主题的min.insync.replicas配置
transaction.state.log.min.isr=1
# 消息的最大持久化时间,默认168小时,7天
log.retention.hours=168
# kafka的消息是以追加的形式落地到文件,当超过这个值的时候,kafka会新起一个文件
log.segment.bytes=1073741824
# 每隔300000毫秒去检查上面配置的log失效时间
log.retention.check.interval.ms=300000
# 设置zookeeper集群地址
zookeeper.connect=192.168.1.26:2181/kafka
# 连接到ZK server的超时时间,没有配置就使用zookeeper.session.timeout.ms
zookeeper.connection.timeout.ms=6000
# 在执行第一次再平衡之前,group协调员将等待更多消费者加入group的时间。
# 延迟时间越长意味着重新平衡的可能性越小,但是等待处理开始的时间增加
group.initial.rebalance.delay.ms=0
mkdir -p /home/dw/dev/data/kafka/kafka-logs

启动kafka并测试

./bin/kafka-server-start.sh -daemon ./config/server.properties
jps #查看进程

测试

# 创建topic为test,分区数为1,副本数为1(注意副本数一定小于等于broker,目前只有一个broker)
./bin/kafka-topics.sh --create --topic test --partitions 1 --replication-factor 1 --zookeeper 192.168.1.26:2181/kafka
# 往topic写入数据
./bin/kafka-console-producer.sh --topic test --broker-list 192.168.1.26:9092
# 从头开始消费
./bin/kafka-console-consumer.sh --topic test --zookeeper 192.168.1.26:2181/kafka --from-beginning

本文主要参考以下文章或书籍

ZooKeeper 3.5官网文档
kafka官网文档
Kafka【第一篇】Kafka集群搭建
ZooKeeper 配置详解
Broker配置
详解num.recovery.threads.per.data.dir
kafka 1.0 中文文档(三)–Broker的配置
【大数据实践】Kafka生产者编程(5)——ProducerConfig详解(下)
Kafka常用命令收录

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值