Kafka学习笔记

LinkedIn开源项目

分布式数据同步系统Databus

高性能计算引擎Cubert

Java异步处理框架ParSeq

Kafka流处理平台

Kafka流处理平台

LinkedIn开发

2011年初开源,加入Apache基金会

2012年从Apache Incubator毕业

Apache顶级开源项目

Streaming platform has three key capabilities:
◆ Publish and subscribe to streams of records, similar to a message queue or enterprise messaging system.
◆ Store streams of records in a fault-tolerant durable way.
◆ Process streams of records as they occur.

Kafka is generally used for two broad classes of applications:
◆ Building real-time streaming data pipelines that reliablyget data between systems or applications
◆ Building real-time streaming applications that transformor react to the streams of data

用在数据的处理上;用在数据的传输上

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所有Partition和Replica的信息,处理KafkaController发起的一些请求,副本状态的切换、添加、读取信息等

Kafka概念沿伸

Partition:

(1)每一个Topic被切分为多个Partitions

(2)消费者数目少于或等于(<=)Partition的数目

(3)Broker Group中的每一个Broker保存Topic的一个或多个Partitions

(4)Consumer Group中仅有一个Consumer读取Topic的一个或多个Partitions,并且是唯一的Consumer

Replication:

(1)当集群中有Broker挂掉的情况,系统可以主动地使用Replicas提供服务

(2)系统默认设置每一个Topic的replication系数为1,可以在创建Topic时单独设置

Replication特点:

(1)Replication的基本单位是Topic的Partition

(2)所有的读和写都从Leader进,Followers只是作为备份

(3)Follower必须能够及时复制Leader的数据

(4)增加容错性与可扩展性

Kafka基本结构

Producer API

Consumer API

Streams API

Connectors API

在这里插入图片描述

在这里插入图片描述

Kafka消息结构

在这里插入图片描述

Offset:当时消息在队列中所处的偏移位置

Length:记录消息的长度

CRC32:校验信息的完整性

Magic:固定的数据,判断是否为Kafka的消息数据

Attributes:可选

Timestamp:时间戳

Kafka的特点

分布式

多分区、多副本、多订阅者、基于ZooKeeper调度

高性能

高吞吐量、低延迟、高并发、时间复杂度为O(1)

持久性与扩展性

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

消息自动平衡:服务端消息消费的平衡(避免出现热点问题),在消费者订阅时进行一个连接的平衡

Kafka应用场景

消息队列(可重复消费)

行为跟踪(实时)

元信息监控

日志处理

流处理

事件源(回溯)

持久性日志(commit log)

Kafka简单案例

主要包括:环境启动、简单生产者、简单消费者

下载与安装

Zookeeper下载:

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

Kafka下载:http://kafka.apache.org/downloads

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

Mac便捷安装:brew install kafka

Kafka代码案例

基础代码

https://github.com/AnAngryMan/KafkaSimpleExample

Kafka高级特性之消息事务

为什么要支持事务

满足“读取-处理-写入”模式

流处理需求的不断增强

不准确的数据处理的容忍度降低(对数据处理的准确性要求提高)

数据传输的事务定义

最多一次:消息不会被重复发送,最多被传输一次,但也有可能一次不传输。

最少一次:消息不会被漏发送,最少被传输一次,但也有可能被重复传输

精确的一次(Exactly once):不会漏传输也不会重复传输,每个消息都传输被一次而且仅仅被传输一次,这是大家所期望的。

事务保证

内部重试问题:Procedure幂等处理

多分区原子写入

在这里插入图片描述

事务保证一避免僵尸实例

(1)每个事务Producer分配一个transactional.id,在进程重新启动时能够识别相同的Producer实例

(2)Kafka增加了一个与transactional.id相关的epoch,存储每个transactional.id内部元数据

(3)一旦epoch被触发,任何具有相同的transactional.id和更旧的epoch的Producer被视为僵尸,Kafka会拒绝来自这些Procedure的后续事务性写入

Kafka高级特性之零拷贝

零拷贝简介

网络传输持久性日志块

Java Nio channel.transforTo()方法

Linux sendfile系统调用

文件传输到网络的公共数据路径

(1)操作系统将数据从磁盘读入到内核空间的页缓存(第一次拷贝)

(2)应用程序将数据从内核空间读入到用户空降缓存中(第二次拷贝)

(3)应用程序将数据写回到内核空间的socket缓存中(第三次拷贝)

(4)操作系统将数据从socket缓冲区复制到网卡缓冲区,以便将数据经网络发出(第四次拷贝)

零拷贝过程

【零拷贝:内核空间与用户空间的交互拷贝为0次】

(1)操作系统将数据从磁盘读入到内核空间的页缓存(第一次拷贝)

(2)将数据的位置和长度的信息的描述符增加至内核空间(socket缓冲区)

(3)操作系统将数据从内核拷贝到网卡缓冲区,以便将数据经网络发出(第二次拷贝)

文件传输到网络的公共数据路径演变

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值