kafka基本概念
Producer: 消息和数据的生产者,向Kafka的一个topic发布消息的进程/代码/服务
Consumer: 消息和数据的订阅者,订阅数据(topic)并且处理其发布的消息的进程/代码/服务
Consumer Group: 逻辑概念,对于同一个topic,会广播给不同的group,一个group中,只有一个consumer
可以消费该消息
Broker: 物理概念,Kafka集群中的每个Kafka节点
Topic: 逻辑概念,Kafka消息的类别,对数据进行区分 隔离
Partition: 物理概念,Kafka下数据存储的基本单元。一个Topic的数据,会被分散存储到多个Partition
,每个Partition是有序的
Replication: 同一个Partition可能会有多个Replica,多个Replica之间数据是一样的
Replication Leader: 一个Partition的多个Replica上,需要一个Leader负责该Partition上与Producer和Consumer交互
ReplicaManager: 负责管理当前broker所有分区和副本的信息,处理KafkaController发起的一些请求,副本状态的切换、添加/读取消息等
kafka概念延伸
Partition
- 每一个Topic被切分为多个Partitions
- 消费者数目少于或等于Partition的数目
- Broker Group中的每一个Broker保存Topic的一个或多个Partitions
- Consumer Group中的仅有一个Consumer读取Topic的一个或多个Partitions,一个partition只能被一个Consumer消费
Replication
- 当集群中有Broker挂掉的情况,系统可以主动地使Replicas提供服务
- 系统默认设置每一个Topic的replication系数为1,可以在创建Topic时单独设置
Replication特点
-
Replication的基本单位是Topic的Partition
-
所有的读和写都从Leader进,Follwers只是作为备份
-
Follower必须能够及时复制Leader的数据
-
增加容错性与可扩展性
kafka基本结构
Kafka消息结构
-
OfferSet:记录消息的偏移量
-
Length:记录的是整条消息的长度
-
CRC32:校验字段,校验信息的完整性
-
Magic:特定数字,判断数据是否属于Kafka,不属于就直接丢弃
-
attributes:(可选)记录的是数据的多个属性,是一个枚举值
kafka特点
Kafka的特点:分布式
-
多分区
-
多副本
-
多订阅者
-
基于ZooKeeper调度
kafka特点:高性能
- 吞吐量高
- 并发高
- 低延时
- 时间复杂度为O(1)
kafka特点:持久性与扩展性
-
数据可持久化
-
容错性
-
支持在线水平扩展
-
消息自动平衡
Kafka应用场景:
- 消息队列
- 行为跟踪
- 元信息监控(运维性质)
- 日志收集
- 流处理
- 事件源
- 持久性日志(commit log)
Kafka简单案例
- 下载与安装
- Zookeeper下载:
- Kafka下载
- 安装:解压,配置环境变量
- Mac便捷安装 brew install kafka
启动zookeeper命令: zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties
进入kafka安装目录,cd /usr/local/Cellar/kafka/1.1.0/
启动kafka命令:./bin/kafka-server-start /usr/local/etc/kafka/server.properties
创建Topic:./bin/kafka-topics --create --zookeeper localhost:2181--replication-factor 1 --partitions 3 --topic imooc-kafka-topic
查看Topic:./bin/kafka-topics --list --zookeeper localhost:2181
启动kafka生存者:./bin/kafka-console-producer --broker-list localhost:9092 --topic imooc-kafka-topic
启动kafka消费者:./bin/kafka-console-consumer --bootstrap-server localhost:9092 --topic imooc-kafka-topic --from-beginning
Kafka消息事务
数据传输的事务定义
- 最多一次:消息不会被重复发送,最多被传输一次,但也有可能一次不传输
- 最少一次:消息不会被漏发送,最少被传输一次,但也有可能被重复传输
事务保证
- 内部重试问题:Procedure幂等处理
- 多分区原子写入
事务保证-避免僵尸实例
- 每个事务Producer分配一个transactional.id,在进程重新启动时能够识别相同的Producer实例
- Kafka增加了一个与transactional.id相关的epoch,存储每个transactional.id内部元数据
- 一旦epoch被触发,任何具有相同的transactional.id和更旧的epoch的Producer被视为僵尸,Kafka会拒绝来自这些Producer的后续事务性写入
Kafka高级特性-零拷贝
- 网络传输持久性日志块
- Java Nio channel.transforTo()方法
- Linux sendfile系统调用
文件传输到网络的公共数据路径
- 操作系统将数据从磁盘读入到内核空间的页缓存
- 应用程序将数据从内核空间读入到用户空间缓存中
- 应用程序将数据写回到内核空间到socket缓存中
- 操作系统将数据从socket缓存区复制到网卡缓存区,以便将数据经网络发出
零拷贝过程
- 操作系统将数据从磁盘读入到内核空间的页缓存
- 将数据的位置和长度的信息的描述符增加至内核空间(socket缓存区)
- 操作系统将数据从内核拷贝到网卡缓存区,以便将数据经网发出