简介
Kafka是一个分布式、支持分区、多副本,基于zookeeper(2.8之前,准确来说是基于Raft算法)协调的分布式消息系统,由Scala
和Java
编写
运行模式
- 点多点模式
消费者主动拉取数据,一对一,消息说到后清除消息
工作流程
1. 消费者获取消息
2. 拉取消息确认
3. 删除此消息
- 发布/订阅模式
一条消息,可以被多个消费者消费,通过Topic
作为桥接,连接生产者与消费者的关系
基础架构
概念解析
- 主题(Topic)
- 逻辑概念,将消息分类,每个消息都属于一个分类,每个主题下有任意数量的消息
- 一个主题可以有一个或多个生产者,也可以有零个、一个或多个消费者
- 代理(Broker)
- broker存储topic数据,生产者将消息发送个broker, 消费者从broker当中获取消息
- Kafka服务部署的一个节点,我们可以把部署了Kafka服务的这台机器看做是一个Broker,也可称作节点
- 一般broker数量越多,集群吞吐量越高
- 分区(Partition)
- 每个topic都可以被划分成一个或者多个分区(每个主题至少有一个分区)
- topic在物理上的分组,在创建topic的时候指定
- 一个Partition只对应一个Broker,一个Broker可以管理多个Partition
- 在一个分区内消息是顺序的,在不同的分区之间,kafka不保证消息的顺序
更多可见 https://www.jianshu.com/p/a19a50e44cad
消息的存储结构
代理(Broker) > 主题(Topic)的某个分区
集群部署如图所示
整体集群图
有了数据分布存储,就必须要保证数据一致性,Kafka2.8后,将Raft算法嵌入其中,不再讲述Zookeeper,leader、follower选举内容可关注raft相关介绍
此图,就是百T大数据,架构的示意图
集群相关参数
# 果Follower长时间未向Leader发送通信请求或同步数据,则该Follower将被踢出ISR,默认30s
replica.lag.time.max.ms=
安装后,部署的基本配置
config/server.properties文件
// 集群节点唯一标识符
broker.id=
// 日志数据文件存储目录
log.dirs=
// zookeeper连接地址,多个英文逗号隔开 zookeeper下新建个kafka目录,数据比较整齐易管理
zookeeper.connect=
系统环境变量添加
export KAFKA_HOME=
export PATH=$PATH:$KAFKA_HOME/bin
启动
- 启动各节点的zookeeper,略
- 启动各节点kakfa服务
bin/kakfa-server-start.sh -daemon config/server.properties
- 关闭kafka命令如下,先关kafka,再关zookeeper
bin/kakfa-server-stop.sh
操作
命令行模式各操作对象对应的cli脚本如下
生产者:kakfa-console-producer.sh
主题集群:kafka-topics.sh
消费者:kafka-console-consumer.sh
- 主题集群 https://www.jianshu.com/p/59f6b44844ba
- 生产者、消费者 https://www.jianshu.com/p/63b2902e2882
- borker https://www.jianshu.com/p/d439b9f4b777
- 数据顺序 https://www.jianshu.com/p/4c0e8aa88815