最近终于有须要消息队列的业务需求出现了,就决定本身搭建一个Kafka
集群做为业务测试用。若是没问题的话就不去购买云服务了,还能省下很多钱呢。对于Kafka
以前本身也写过demo稍微了解了一下,此次就把实践的要点记录下来。html
Kafka
的安装能够说是很是简单了。java
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
就是启动成功了。
复制代码
参数配置很是的重要,这里只是重点讲下几个基本都要配置的点。首先打开配置文件,vi config/server.properties
spring
broker.id
指的是当前节点的id,必须是惟一不重复的整数。apache
例子: broker.id=0
bash
advertised.listeners
,设置这个是为了让客户端拿到正确的主机地址,默认是拿的java.net.InetAddress.getCanonicalHostName()
的值,会拿到相似于izbp1i1jfn47dnqehu39pez:9092
这样的地址,因此就报链接错误了。服务器
例子: advertised.listeners=PLAINTEXT://111.222.333.444:9092
并发
log.dirs
指的是消息存放的目录,能够指定多个用,
分隔,默认是/tmp/kafka-logs
。这里有个坑/tmp
目录是会不按期清理数据的,因此放这里可能消息就会神秘消失。建议指定一个其余的目录。框架
例子: log.dirs=/mnt/kafka-logs
tcp
zookeeper.connect
指的是zookeeper
的链接地址,集群要写多个,注意多台服务器要能联通。测试
例子: zookeeper.connect=111.16.212.244:2181,222.16.212.243:2181,333.16.212.236:2181
log.cleanup.policy
指的是消息的清理策略,默认是168小时前的消息会被删除。能够改成压缩消息,同一个key
的消息只保留最新的。不过建议在topic
里设置,能够把重要的消息设置为压缩,不重要的设置为删除。
例子: log.cleanup.policy=compact
num.partitions
指的是主题的默认分区数量。默认值是1,建议改为50,由于一个分区只容许一个消费者消费,分区数量多的话能够并发消费。
例子:num.partitions=50
default.replication.factor
指的是自动建立主题的副本数量.默认是1,即只有一个主副本,至关于没有备份。建议改成大于等于2
小于等于服务器数量的值。
例子: default.replication.factor=2
主题的参数配置是写在生产者或者消费者的代码里的,一样是只提几个重要的。
cleanup.policy
和服务器的log.cleanup.policy
配置效果是同样的,只不过优先级高一些。
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
的影响。