Kafka 安装实践笔记

629 阅读4分钟

最近终于有需要消息队列的业务需求出现了,就决定自己搭建一个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的影响。