简单介绍下kafka
kafka是一个分布式的消息队列系统,消息以topic分类传输,生产者往topic发送消息时,消息会被分散到topic的不同分区中,消费者以组的形式消费topic中的数据,一个topic的一个分区,只能被同一个组里的一个消费者消费,但同一个消费者,可以消费多个分区数据,每个组自己维护topic每个分区的消费偏移量。
kafka不能保证不同分区消息的消费顺序,因此若对于消息消费顺序有要求,必须确保该类消息处于同一分区,可以通过发送消息时,指定相同key来处理。
1、下载安装包
http://kafka.apache.org/downloads
这里下载的是kafka_2.12-2.2.0版的
2、解压安装包,找到config目录下的server.properties文件,修改其中配置,部分参数说明如下
基本参数 |
说明 |
broker.id |
broker在集群中的唯一标识,不能为负数 |
log.dirs |
数据存放的目录,这个目录可以配置为“,”逗号分割的表达式,下面的num.io.threads要大于这个目录的个数,如果配置多个目录,新创建topic消息持久化的地方是,当前以逗号分割的目录中,分区数最少的那一个 |
listeners | PLAINTEXT://hostname:port;相当于下面的host.name+port |
advertised.listeners | 外网客户端访问返回的地址 PLAINTEXT://hostname:port |
host.name | broker的主机地址,若是设置了,那么会绑定到这个地址上,若是没有,会绑定到所有的接口上,并将其中之一发送到ZK |
port |
监听端口 |
message.max.bytes |
消息最大字节 |
num.network.threads |
broker处理网络消息的最大线程数 |
num.io.threads |
broker处理磁盘IO的线程数,数值应该大于你的目录数 |
background.threads |
处理后台任务的线程数,例如过期消息文件的删除等 |
queued.max.requests |
等待IO线程处理的请求队列最大数,若是等待IO的请求超过这个数值,那么会停止接受外部消息,应该是一种自我保护机制 |
socket.send.buffer.bytes |
socket的发送缓冲区 |
socket.receive.buffer.bytes |
socket的接受缓冲区 |
socket.request.max.bytes |
socket请求的最大字节数值,防止serverOOM,message.max.bytes必然要小于socket.request.max.bytes,会被topic创建时的指定参数覆盖 |
log.segment.bytes |
topic的分区是以一堆segment文件存储 |