这一章节来真正启动Kafka集群,先给出一份Broker的配置项列表,将以下信息复制三份,分别配置三台阿里云ECS上的Broker配置文件:

############################# Server Basics #############################
broker.id=0
delete.topic.enable=true
auto.create.topics.enable=true

############################# Socket Server Settings #############################
listeners=EXTERNAL://阿里云ECS内网IP:9092,INTERNAL://阿里云ECS内网IP:9093
listener.security.protocol.map=EXTERNAL:PLAINTEXT,INTERNAL:PLAINTEXT
inter.broker.listener.name=INTERNAL
advertised.listeners=EXTERNAL://阿里云ECS外网IP:9092,INTERNAL://阿里云ECS内网IP:9093
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600

############################# Log Basics #############################
log.dirs=/root/kafka_2.12-2.0.0/data/kafka
num.partitions=1
num.recovery.threads.per.data.dir=1
default.replication.factor=3
min.insync.replicas=2
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1

############################# Log Retention Policy #############################
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
log.segment.ms=604800000

############################# Zookeeper #############################
zookeeper.connect=zookeeper.server.1:2181,zookeeper.server.2:2181,zookeeper.server.3:2181
zookeeper.connection.timeout.ms=6000

############################# Group Coordinator Settings #############################
group.initial.rebalance.delay.ms=0

############################# Message #############################
message.max.bytes=1048576
fetch.message.max.bytes=1048576

閱讀全文 »

这一章节主要对和Listener相关的四个配置项做以详细解释。listenersadvertised.listenerslistener.security.protocol.mapinter.broker.listener.name这四个配置项可能是大家最容易混淆和最不容易理解的。

在解释这些配置项之前,我们先来明确几个概念。

  • 部署Broker的阿里云ECS称为Host Machine。
  • 在阿里云ECS里启动的Producer或者Consumer,比如使用Kafka CLI启动的称为Internal Client。
  • 在大家的IDEA中使用Java编写的,或者第三方的Producer/Consumer,称为External Client。
  • Host Machine具有外网IP和内网IP。
  • Internal Client可以同时和Host Machine的外网IP及内网IP通信。
  • External Client只能和Host Machine的外网IP通信。
  • 多个阿里云ECS之间可以同时通过外网IP及内网IP通信。
    • 既在这个特定的场景下,Host Machine之间可以同时通过外网IP及内网IP通信。
    • 再换句话说就是不同Host Machine上的Broker之间可以同时通过外网IP及内网IP通信。
閱讀全文 »

接下来几个章节我们开始搭建真正的Kafka集群,服务器还是使用上一节章节搭建Zookeeper使用的三台阿里云ECS。

搭建单机Kafka章节中,在Kafka的/root/kafka_2.12-2.0.0/config/server.properties配置文件中,我们只配置了log.dirsadvertised.listeners这两个配置项,其他配置项都是使用默认值。

Kafka的配置项一共多达140余个,虽然有一部分通常情况下我们不需要修改,使用默认值即可,但这只是一少部分。搭建Kafka集群时,光通常情况下需要考虑的配置项就有40余个。

另外,这些配置项要根据具体的业务场景做各种调整,不存在一套配置项通吃所有业务场景的情况,而且基本不可能一次性配置出性能最优、最能满足业务场景的配置项组合,都需要经过调整、测试,反复进行配置才能总结出相对最优的配置项组合。

閱讀全文 »

这一节我们来真正搭建一个Zookeeper集群。

搭建Zookeeper集群

首先要做的就是再租赁两个服务器,参照搭建单机Kafka章节中的步骤,租赁阿里云服务器、安装JDK、下载配置Kafka、配置安全组规则。

Zookeeper配置信息

搭建单机Kafka章节中,启动的是单机Zookeeper,所以/root/kafka_2.12-2.0.0/config目录下的zookeeper.properties配置文件中只配置了dataDir,也就是存储各种数据、日志、快照的路径。

在搭建Zookeeper时,就需要额外再配置一些参数了。同样打开/root/kafka_2.12-2.0.0/config目录下的zookeeper.properties配置文件,额外添加如下内容:

maxClientCnxns=0
tickTime=2000
initLimit=10
syncLimit=5
quorumListenOnAllIPs=true
server.1=zookeeper.server.1:2888:3888
server.2=zookeeper.server.2:2888:3888
server.3=zookeeper.server.3:2888:3888

閱讀全文 »

这一节来看看Zookeeper的命令行工具。

Zookeeper CLI

在第七章节搭建单机Kafka中,我们已经发现了,Kafka是自带Zookeeper的,而且在启动Kafka之前,要先启动Zookeeper,相当于启动了单机Zookeeper,所以我们先说Zookeeper CLI,后面说Zookeeper集群时再具体说配置参数。

展示zNode

首先打开终端,连接至我们的服务器,进入/root/kafka_2.12-2.0.0/bin目录,执行如下命令:

sh zookeeper-shell.sh 127.0.0.1:2181

这是Zookeeper CLI Client连接Zookeeper的命令,当看到如下信息时,说明连接成功:

Connecting to 127.0.0.1:2181
Welcome to ZooKeeper!
JLine support is disabled

先来来看看目前Zookeeper里都有哪些zNode:

ls /

[cluster, controller_epoch, controller, brokers, zookeeper, kafka-manager, admin, isr_change_notification, consumers, log_dir_event_notification, latest_producer_id_block, config]

ls命令和Linux中的作用一样,在Zookeeper中是展示某个zNode下的所有zNode。这里的/表示根zNode。可以看到已经有很多zNode注册在了Zookeeper。再来看看brokers下还有哪些zNode:

ls /brokers

[ids, topics, seqid]

閱讀全文 »