Kafka流处理平台

课程安排

  • Kafka概念解析
  • Kafka结构设计
  • Kafka场景与应用
  • Kafka高级特性

2-1 什么是Kafka

Kafka 是一种高吞吐量、分布式、基于发布/订阅的消息系统,最初由 LinkedIn 公司开发,使用Scala 语言编写,目前是 Apache 的开源项目。
面向数据流的生产、转换、存储、消费为一体的流处理平台。

  • 分布式流处理平台
  • Kafka是基于Zookeeper的分布式消息系统
  • Kafka具有高吞吐率、高性能、实时及高可靠等特点;
流平台有三个关键特性:
  • 是发布和订阅数据的流,类似于消息队列。
  • 是数据流存储的平台,并且具备容错。
  • 当数据产生时对数据做处理。
Kafka作用于什么?
  • (数据传输)构建实时数据流管道,当系统之间有很强的数据依赖性时。
  • (数据处理) 构建实时数据处理应用,能够转、换响应这个数据流。

3-1 Kafka基本概念

  • Producer:消息和数据的生产者,向Kafka的一个topic发布消息的进程/代码/服务。
  • Consumer: 消息和数据的消费者,订阅数据(Topic)并且处理其发布的消息的进程/代码/服务。
  • Consumer Group:逻辑概念,对于同一个Topic,会广播给不同的group,一个group中,只有一个consumer可以消费该消息。消费者分组,每个 Consumer必须属于一个 group
  • Broker:物理概念,Kafka服务器,Kafka集群中的每个Kafka节点,负责消息存储和转发。
  • Topic: 逻辑概念,Kafka消息的类别,Kafka按照topic来分类消息(对数据进行区分、隔离)。
  • Partition:物理概念,Kafka下数据存储的基本单元。一个topic数据,会被分散存储到多个Partition,每个Partition是有序的。
    • 每一个Topic被切分为多个Partition
    • 消费者数目少于或等于Partition的数目。
    • Broker Group中的每一个Broker保存Topic的一个或多个Partitions(同一个Partition不会被多个Broker保存)。
    • Consumer Group中的仅有一个Consumer读取Topic的一个或多个Partitions,并且是唯一的Consumer。(1.容错:以Group的方式消费Topic;2.提高一定的性能)
  • Replication: 同一Partition可能会有多个Replica,多个Replica之间数据是一样的。
    • 当集群中有Broker挂掉的情况,系统可以主动地使Replicas提供服务。
    • 系统默认设置每一个TopicReplication系数为1(没有副本,节省空间),可以在建Topic的时候单独使用。
  • Replication Leader:一个Replication的多个Replica上,需要一个Leader负责该Partition上与ProducerConsumer交互。
  • ReplicaManager: 负责管理当前broker所有分区和副本的信息,处理KafkaController发起的一些请求,副本状态的切换、添加/读取消息等。
Replication特点
  • Replication的基本单位是TopicPartition
  • 所有的读和写都是从Leader进,Followers只是作为备份。
  • Follower必须能够及时复制Leader的数据。
  • 增加容错性与可扩展性。

3-3 Kafka基本结构

  • Producer Api
  • Consumer Api
  • Streams Api
  • Connectors Api

在这里插入图片描述

1.broker的信息都存储在ZooKeeper中。
2.TopicPartition都是存储在ZooKeeper中。

Kafka消息结构

在这里插入图片描述Offset: 当前消息所处的偏移。
Lenght:消息的长度。
CRC32:校验字段,校验当前信息的完整性,避免消息不完整导致生产或消费失败。
Magic: 固定值,Kafka可以非常快速的判断该消息是不是Kafka消息。
attributes:可选,当前消息的属性,会有一个枚举值。
Timestamp: 时间戳。
Key Length: Key的长度。
Key: Key

3-4 Kafka特点

分布式

  • 多分区(Partition)
  • 多副本(Replication)
  • 多订阅者
  • 基于Zookeeper调度

高性能

  • 高吞吐量(每秒几十万)
  • 低延迟
  • 高并发
  • 时间复杂度为O(1)

持久性与扩展性

  • 数据可持久化
  • 容错性
  • 在线水平扩展
  • 消息自动平衡

4-1 Kafka应用场景

  • 消息队列
  • 行为跟踪
  • 元信息监控(运维数据)
  • 日志收集
  • 流处理
  • 事件源
  • 持久性日志

4-2 Kafka简单案例

5-1Kafka高级特性之消息事务

为什么要支持事务
  • 满足"读取-处理-写入"模式
  • 流处理需求的不断增强
  • 不准确的数据处理的容忍度
数据传输的事务定义
  • 最多一次:消息不会被重复发送,最多被传输一次,但也有可能一次不传输。
  • 最少一次:消息不会被漏发送,最少被传输一次,但也有可能被重复传输。
  • 精确的一次(Exactly once):不会漏传输也不会重复传输,每个消息都被传输一次而且仅仅被传输一次,这是大家所期望的。
保证Kafka的事务
  • 内部重试问题:Procedure幂等处理。
  • 多分区原子写入。
事务保证-避免僵尸实例
  • 每个事务Producer分配一个transactional.id,在进程重新启动时能够识别相同的Producer实例
  • Kafka增加了一个与transactional.id相关的epoch,存储每个transactional.id内部元数据。
  • 一旦epoch被触发,任何具有相同的transactional.id和更旧的epochProducer被视为僵尸,Kafka会拒绝来自这些Producer的后续事务性写入。

5-2Kafka高级特性之零拷贝

  • 网络传输持久性日志块
  • Java NIO channel.transforTo()方法
  • Linux sendfile系统调用
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值