序
最近终于有需要消息队列的业务需求出现了,就决定自己搭建一个Kafka
集群作为业务测试用。如果没问题的话就不去购买云服务了,还能省下不少钱呢。对于Kafka
之前自己也写过demo稍微了解了一下,这次就把实践的要点记录下来。
安装Kafka
Kafka
的安装可以说是非常简单了。
- 首先去官网找到下载链接,注意要下载二进制版本。
- 然后用
wget
下载到服务器上,再解压(tar xzvf
)就ok了 Kafka
是依赖于zookeeper
的,不过官方的安装包里已经自带了zookeeper
,单机版直接用已经写好的脚本启动就可以了,我是按文档搭了个zookeeper
集群。
bin/zookeeper-server-start.sh config/zookeeper.properties
需要后台运行的加 -daemon 参数
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
用netstat -ntlp命令可以看到
tcp 0 0 0.0.0.0:2181 0.0.0.0:* LISTEN {pid}/java
就是启动成功了。
复制代码
服务器参数配置,Broker Configs
参数配置非常的重要,这里只是重点讲下几个基本都要配置的点。首先打开配置文件,vi config/server.properties
broker.id
broker.id
指的是当前节点的id,必须是唯一不重复的整数。
例子: broker.id=0
advertised.listeners
advertised.listeners
,设置这个是为了让客户端拿到正确的主机地址,默认是拿的java.net.InetAddress.getCanonicalHostName()
的值,会拿到类似于izbp1i1jfn47dnqehu39pez:9092
这样的地址,所以就报连接错误了。
例子: advertised.listeners=PLAINTEXT://111.222.333.444:9092
log.dirs
log.dirs
指的是消息存放的目录,可以指定多个用,
分隔,默认是/tmp/kafka-logs
。这里有个坑/tmp
目录是会不定期清理数据的,所以放这里可能消息就会神秘消失。建议指定一个其他的目录。
例子: log.dirs=/mnt/kafka-logs
zookeeper.connect
zookeeper.connect
指的是zookeeper
的连接地址,集群要写多个,注意多台服务器要能联通。
例子: zookeeper.connect=111.16.212.244:2181,222.16.212.243:2181,333.16.212.236:2181
log.cleanup.policy
log.cleanup.policy
指的是消息的清理策略,默认是168小时前的消息会被删除。可以改为压缩消息,同一个key
的消息只保留最新的。不过建议在topic
里设置,可以把重要的消息设置为压缩,不重要的设置为删除。
例子: log.cleanup.policy=compact
num.partitions
num.partitions
指的是主题的默认分区数量。默认值是1,建议改成50,因为一个分区只允许一个消费者消费,分区数量多的话可以并发消费。
例子:num.partitions=50
default.replication.factor
default.replication.factor
指的是自动创建主题的副本数量.默认是1,即只有一个主副本,相当于没有备份。建议改为大于等于2
小于等于服务器数量的值。
例子: default.replication.factor=2
主题参数配置,Topic-Level Configs
主题的参数配置是写在生产者或者消费者的代码里的,同样是只提几个重要的。
cleanup.policy
cleanup.policy
和服务器的log.cleanup.policy
配置效果是一样的,只不过优先级高一些。
min.insync.replicas
min.insync.replicas
指的是最小同步副本数量,默认是1个建议设为大于等于2,这样消息至少有一个副本。这里和生产者的acks配置有关,当acks设置为all的时候,消息需要复制到所有副本里才算成功,这里的所有副本数量不一定是固定的。比如一个主题有3个副本,其中一个副本因为同步进度太慢被踢出了isr(In-Sync Replicas)
,这时的所有副本其实只有2个(包括主副本),而不是3个。
例子: min.insync.replicas=2
分区数量和副本数量
Kafka
是默认支持主题的自动创建的,默认的分区数量和副本数量配置已经在服务器配置里讲过了。当然也可以在spring
等框架里配置,事实上主题的参数配置都可以在spring
里配置,需要的可以去文档查询。
结尾
到这里Kafka
的大部分业务无关的配置都已经搞定了,接下来就是写生产者和消费者了。之后还会写在spring boot
里使用Kafka
的笔记,到这里也只是简单的配置了Kafka
,建议去阅读下《Kafka技术内幕:图文详解Kafka源码设计与实现》
,这样才能更好的理解一些配置参数的意义和对Kafka
的影响。