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流处理平台_第1张图片

Kafka流处理平台_第2张图片

Kafka流处理平台_第3张图片

  Kafka消息结构

  OfferSet:记录消息的偏移量

  Length:记录的是整条消息的长度

  CRC32:校验字段,校验信息的完整性

  Magic:特定数字,判断数据是否属于Kafka,不属于就直接丢弃

  attributes:(可选)记录的是数据的多个属性,是一个枚举值

  kafka特点

  Kafka的特点:分布式

  多分区

  多副本

  多订阅者

  基于ZooKeeper调度

  kafka特点:高性能

  吞吐量高

  并发高

  低延时

  时间复杂度为O(1)

  kafka特点:持久性与扩展性

  数据可持久化

  容错性

  支持在线水平扩展

  消息自动平衡

  Kafka应用场景:

  消息队列

  行为跟踪

  元信息监控(运维性质)

  日志收集

  流处理

  事件源

  持久性日志(commit log)

  Kafka简单案例

  下载与安装

  Zookeeper下载:

  http://zookeeper.apache.org/releases.html#download

  Kafka下载

  http://kafka.apache.org/downloads

  安装:解压,配置环境变量

  Mac便捷安装 brew install kafka

Kafka流处理平台_第4张图片

  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缓存区)

  操作系统将数据从内核拷贝到网卡缓存区,以便将数据经网发出

  

Kafka流处理平台_第5张图片