Kafka 简介
Kafka 是由 LinkedIn 开发的一个分布式的消息系统,使用 Scala 编写,它因可以水平扩展和高吞吐率而被广泛使用。
Kafka 基本概念
- Producer:消息和数据的生产者,向 Kafka 的一个 Topic 发布消息的进程/代码/服务
- Consumer:消息和数据的消费者,订阅数据(Topic)并且处理其发布的消息的进程/代码/服务
- Consumer Group:逻辑概念,对于同一个 Topic,会广播给不同的 Group,一个 Group 中,只有一个 consumer 可以消费该消息
- Broker:物理概念,Kafka 集群中的每个 Kafka 节点(即Kafka 所在服务器节点)
- Topic:逻辑概念,Kafka 消息的类别,对数据进行区分、隔离
- Partition:物理概念,Kafka 下数据存储的基本单元。一个 Topic 数据会被分散存储到多个 Partition,每一个 Partition 是有序的
- Replication:同一个 Partition 可能会有多个 Replica,多个 Replica 之间数据是一样的(相当于副本的概念)
- Replication Leader:一个 Partition 的多个 Replica 上,需要一个 Leader 负责该 Partition 上与 Producer 和 Consumer 交互
- RelicaManager:负责管理当前 broker 所有分区和副本的信息,处理 KafkaController 发起的一些请求,副本状态的切换、添加/读取消息等(负责 Leader 的选举)
Partition
- 每一个 Topic 被切分为多个 Partitions
- 消费者数目少于或等于 Partition 的数目
- Broker Group 中的每一个 Broker 保存 Topic 的一个或多个 Partitions
- Consumer Group 中的仅有一个 Consumer 读取 Topic 的一个或多个 Partitions,并且是唯一的 Consumer
Replication
- 当集群中有 Broker 挂掉的情况,系统可以主动地使 Replicas 提供服务
- 系统默认设置每一个 Topic 的 replication 系数为1,可以在创建 Topic 时单独设置
Replication 特点
- Replication 的基本单位是 Topic 的 Partition
- 所有的读和写都从 Leader 进,Followers 只是作为备份
- Follower 必须能够即使复制 Leader 的数据
- 增加容错性与可扩展性
Kafka 基本结构
- Producer Api
- Consumer Api
- Streams Api
- Connectors Api
Kafka 特点
- 分布式
- 多分区
- 多副本
- 多订阅者
- 基于 Zookeeper 调度
- 高性能
- 高吞吐量
- 低延迟
- 高并发
- 时间复杂度为O(1)
- 持久性与可扩展性
- 数据可持久化
- 容错性
- 支持在线水平扩展
- 消息自动平衡
Kafka 应用场景
- 消息队列
- 行为追踪
- 元信息监控
- 日志收集
- 流处理
- 事件源
- 持久性日志(commit log)
Kafka 常用命令
启动 Zookeeper
1
zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties
启动 Broker
1
zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties
查看主题列表
1
kafka-topics --list --zookeeper localhost:2181
查看单个主题详情
1
kafka-topics --describe --zookeeper localhost:2181 --topic test-kafka-topic
创建 Topic
1
2kafka-topics --create --zookeeper localhost:2181 --replication-factor 1
--partitions 1 --topic test-kafka-topic生产消息
1
kafka-console-producer --broker-list localhost:9092 --topic test-kafka-topic
查看消息
1
2kafka-console-consumer --bootstrap-server localhost:9092 --topic
test-kafka-topic --from-beginning
注意:–from-beginning 决定消费者是否从头开始消费