Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。该项目的目标是为处理实时数据提供一个统一、高吞吐、低延迟的平台。其持久化层本质上是一个“按照分布式事务日志架构的大规模发布/订阅消息队列”
大规模发布/订阅模式是生产者生产的消息可以多个消费者(订阅者)消费该消息,这里面又有两种模式:消费者主动拉取消息和消息主动推送。
相对于大规模发布/订阅模式,还有点对点模式,这种模式下,消息只能被一个消费者消费,不能实现消息的复用。
本质上说,kafka是一个消息队列,也就是消息暂存的地方,满足消息和队列两个特征。
kafka的架构
其中,broker是一个服务器,topic是为了给消息分类,partition是为了将消息发送到不同的服务器从而提高消费能力,并且实现负载均衡。另外,每个partition 也有 leader 节点和 follower 节点,生产者生产数据首先会去寻找 leader 节点,follower 节点作为副本,平时只会做同步操作,只有当 leader 挂掉的时候,follower 才上升为 leader 节点代替 leader 发挥作用。
注意几点:
1.一个分区只能被消费者组中的一个消费者消费,因此最好的并发是消费者组中的消费者个数和分区数相等。
2.zk除了负责管理 kafka 集群外,消费者消费的上下文信息也保存在 zk 中,但是 0.9 及以后的版本消费的 offset 保存在 kafka 本地
kafka 的安装
地址:https://kafka.apache.org/downloads
其中的 2.12 和 2.13 是 scala 的版本。
解压过后需要配置 config 目录下的 server.properties 文件。
配置好以后将整个 kafka 文件分发给其他的机器。
由于 kafka 是依赖 zookeeper 的,因此要先启动 zk 再启动 kafka(确保 zk 已经启动,如下所示)。
接着启动 kafka,在 bin 目录中,kafka-topics.sh 是负责 topic 增删改的, kafka-console-consumer 是测试环境用,zookeeper-server-start.sh 用来启动 kafka。因此,执行 zookeeper-server-start.sh 来启动 kafka 集群。
看到如下信息则代表 kafka 已经启动成功了
以上启动的时候也可以使用 -daemon 让 kafka 服务作为一个守护进程启动。
以上操作一次只能启动 kafka 集群中的一个实例,如果每个 kafka 实例都手动启动一遍很麻烦,想要一次启动一个 kafka 集群,可以通过写一个脚本来实现。
这样,就可以通过一个命令实现 kafka 集群的启动和停止。