Kafka需要JDK环境
Kafka需要Zookeeper缓存存储各种元数据, 单机模式或集群模式都支持
Kafka从2.5.0开始不再支持Scala 2.11, 我们下载支持Scala2.11的最后一个版本 kafka_2.11-2.4.1.tgz
注意
Kafka原生即为集群架构, 即使启动单个节点, 也是一个单节点的集群, 同样有leader等, 就是它自己. Kafka集群是无状态的, 其将brokers数据存在zookeeper中, 多个broker的互相发现也是通过zookeeper, 所以kafka很容易扩容添加broker, 只需要zookeeper地址配置一样的值, 然后启动就可以了
下载安装
# 2.11是scala的版本,2.4.1是kafka的版本
wget https://mirrors.bfsu.edu.cn/apache/kafka/2.4.1/kafka_2.11-2.4.1.tgz
tar -xzf kafka_2.11-2.4.1.tgz
mv kafka_2.11-2.4.1 kafka-2.11-2.4.1
cd kafka-2.11-2.4.1
mkdir mrathena
配置
我个人习惯将各种数据日志的配置到独立的文件夹mrathena下
cp config/server.properties mrathena/kafka.config.9092
vim kafka.config.9092
# 在kafka集群中必须唯一
broker.id=0
# 部署的机器内网ip和提供服务的端口号
listeners=PLAINTEXT://172.16.138.202:9092
# 数据存储目录
log.dirs=/application/kafka-2.11-2.4.1/mrathena/kafka.data.9092
# zookeeper地址, 支持集群, 如:localhost:2181,localhost:2182
# 默认使用zookeeper的 / 目录, 导致在zookeeper搞的很乱, 可以在后面写 /kafka 来指定根目录
zookeeper.connect=localhost:2181/kafka
启动
kafka-server-start.sh [-daemon] server.properties
, server.properties 的配置路径是一个强制的参数,-daemon 表示以后台进程运行,否则ssh客户端退出后,就会停止服务。(注意,在启动kafka时会使用linux主机名关联的ip地址,所以需要把主机名和linux的ip映射配置到本地host里,用vim /etc/hosts)
../bin/kafka-server-start.sh -daemon kafka.config.9092
# 或者 bin/kafka-server-start.sh config/server.properties &
启动kafka失败(可以从logs/kafkaServer.out里查看启动日志), 原因是启动要申请1G内存, 我这边1c2g的配置, 没有这么大的内存了, 测试使用也没必要这么大, 所以调整一下
vim kafka-server-start.sh
# 调整 KAFKA_HEAP_OPTS="-Xmx1G -Xms1G" 为 KAFKA_HEAP_OPTS="-Xmx256m -Xms256m"
进入zookeeper查看节点数据
# 我们进入zookeeper目录通过zookeeper客户端查看下zookeeper的目录树
bin/zkCli.sh
# 查看zk的根目录kafka相关节点
ls /
# 查看kafka节点, broker只有一个 0
ls /kafka/brokers/ids
停止kafka
../bin/kafka-server-stop.sh
配置文件 server.properties 核心配置详解
Property | Default | Description |
---|---|---|
broker.id | 0 | 每个broker都可以用一个唯一的非负整数id进行标识;这个id可以作为broker的“名字”,你可以选择任意你喜欢的数字作为id,只要id是唯一的即可。 |
log.dirs | /tmp/kafka-logs | kafka存放数据的路径。这个路径并不是唯一的,可以是多个,路径之间只需要使用逗号分隔即可;每当创建新partition时,都会选择在包含最少partitions的路径下进行。 |
listeners | PLAINTEXT://192.168.65.60:9092 | server接受客户端连接的端口,ip配置kafka本机ip即可 |
zookeeper.connect | localhost:2181 | zooKeeper连接字符串的格式为:hostname:port,此处hostname和port分别是ZooKeeper集群中某个节点的host和port;zookeeper如果是集群,连接方式为 hostname1:port1, hostname2:port2, hostname3:port3 |
log.retention.hours | 168 | 每个日志文件删除之前保存的时间。默认数据保存时间对所有topic都一样。 |
num.partitions | 1 | 创建topic的默认分区数 |
default.replication.factor | 1 | 自动创建topic的默认副本数量(master和follower都叫副本),建议设置为大于等于2 |
min.insync.replicas | 1 | 当producer设置acks为-1时,min.insync.replicas指定replicas的最小数目(必须确认每一个repica的写数据都是成功的),如果这个数目没有达到,producer发送消息会产生异常 |
delete.topic.enable | true | 是否允许删除主题 |
集群增加 broker
对于kafka来说,一个单独的broker意味着kafka集群中只有一个节点。要想增加kafka集群中的节点数量,只需要多启动几个broker实例即可。
拷贝两个虚拟机, 修改 servier.properties 的 broker.id 和 listeners 的 ip 地址, 注意 broker.id 不能重复, 确保 zookeeper.connect 的配置一模一样, 然后全部启动
查看zookeeper
[zk: localhost:2181(CONNECTED) 21] ls /kafka/brokers/ids
[0, 1, 2]
集群环境ok