一、术语解释
缩写及术语 | 解释 |
Kafka | Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统,常见可以用于web/nginx日志、访问日志,消息服务等等,主要应用场景是:日志收集系统和消息系统。 |
broker | Kafka单个节点称为broker,一个Kafka服务就是一个broker,多个broker可以组成一个Kafka集群。 |
topic | topic相当于传统消息系统MQ中的一个队列queue,producer端发送的message必须指定是发送到哪个topic上.在一个大型的应用系统中, |
partition | 一个topic下面可以有多个partition,kafka在接收到message后,会将这个message进行load blance根据(hash(message)%[broker_num])均匀的将这个message分配在不同的partition上。partition的配置个数一般与kafka的集群数保持一致即可(即broker的数量)。 |
Partition replica | partition replica 是partition 的副本数据,是为了防止数据丢失的一种优化,partition 不会和 replica 在同一台broker上。Replica 的数量与partition数量保持一致即可做到高可用。 |
producer | 生产message,发送到topic上。 |
consumer | 订阅指定的topic,消费topic上面的message信息。 |
二、网络环境准备
服务 | 协议 | 开始端口 | 结束端口 | 备注 |
Kafka | TCP | 9092 | Kafka访问端口 |
三、硬件环境准备
类型 | Ip | CPU | 内存 | 硬盘 | 所需软件 |
Kafka1 | <ip1> | 16C | 64G | 200GB | Kafka |
kafka2 | <ip2> | 16C | 64G | 200GB | Kafka |
Kafka3 | <ip2> | 16C | 64G | 200GB | Kafka |
四、Kafka部署
1、部署方案
1.下载安装包
cd /data/kafka
wget https://archive.apache.org/dist/kafka/2.8.0/kafka_2.12-2.8.0.tgz
tar -zxvf kafka_2.12-2.8.0.tgz
cd kafka_2.12-2.8.0
2. 修改配置文件config/server.properties
broker.id=49 # 每个broker在集群中的唯一标识,正整数。当该服务器的ip地址发生变更,但broker.id未变,则不会影响consumers的消费情况
listeners=PLAINTEXT://kafkaIp:9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/data/kafka/logs
num.partitions=3
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181/kafka1
zookeeper.connection.timeout.ms=60000
group.initial.rebalance.delay.ms=0
auto.create.topics.enable=true
delete.topics.enable=true
3. 启动
#启动
kafka/bin/kafka-server-start.sh -daemon kafka/config/server.properties
#停止
kafka/bin/kafka-server-stop.sh
2、Kafka调优
- kafka用于处理网络请求的线程数配置优化
num.network.threads=3
- kafka用于处理网络请求的线程数优化
num.io.threads=8
- kafka连接zk的超时时间配置
zookeeper.connection.timeout.ms=6000
- 日志保留策略配置,当kafka的被写入海量消息后,会生成很多数据文件,且占用大量磁盘空间,如果不及时清理,可能磁盘空间不够
log.retention.hours=168
- 优化允许接收的最大数据包的大小(防止数据包过大导致OOM)
socket.request.max.bytes=104857600
- 优化发送数据的缓冲区和接收数据的缓冲区
socket.request.max.bytes=104857600
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400