Kafka设计与原理

2022-04-18 18:38:07 浏览数 (1)

Kafka基础介绍

Kafka是LinkedIn在2010年开发的分布式消息系统• 使用于LinkedIn的活动流和运营数据处理的管道

• 使用Scala&Java语言编写 • 并于2011年成为Apache的开源项目

• 具有分布式/高性能/高吞吐/水平扩展等特性• 支持发布/订阅&点对点模式的分布式消息系统

• 0.9之后支持StreamsAPI

• 支持主流编程语言的API调用[C /Python/Go/Ruby/PHP/…]

Kafka版本演进(一)

kafka版本演进(二)

Kafka基础概念

Kafka的优点及场景(一)

分布式/可分区,具有消息复制和容错系统 [可靠性]

- 可以水平扩展,对不同Topic的不同处理 [扩展性]

- 发送和消息具有高吞吐量,压测最低10w/s主要瓶颈在网络IO[高性能]

- 支持批量消费,批量提交offset,快速落盘 [高可用性]

优点及场景(二)

监控系统

处理可监控的数据,可实时进行消息的处理计算

日志处理

Application 批量,异步发送日志/行为数据

流式处理

可以流式读取数据,支持Storm/Spark/Kafka Steaming

消息得生产实例&原理(一)

生产者-发送/发布消息的一端

消息的生产&原理(二)

消息的生产&原理(三)

消息的消费实例&原理(一)

消息的消费实例&原理(二)

消费规则:

一个Partition只能被同一个ConsumerGroup的一个线程消费

线程数小于partition数,可能会消费多个Partition

同一个partition保证是有序消费的

0.9之前consumer依赖zk,0.9之后直接链接kafka的Coordinator

消息的消费&原理(三)

数据的持久化机制-PARTITION

  • Kafka数据存储单元-Partition
  • 一个Partition对应一个文件夹
  • Partition中分为多个Segment
  • Segment的命名为offset.logSegment对应一个ofset.Index文件[记录offset的磁盘位置]

数据存储结构

数据存储示意图:

Segment file中index与log文件的对应关系图 [摘自网络]

Message物理结构图

Kafka 消息传递保证

At most once [最多一次]

At least once [至少一次]

Exacty once [正好一次]

Kafka 默认机制是 At least once ,用户可以选择处理一批数据之后批量提交offset来实现“Exacty once”

副本因子(REPLICATION)

Kafka将每个Partition复制到多个Server上,每一个Partition都有一个leader和多个follower[多机备份]

当一个leader挂掉之后,通过选举选择follower中一个作为leader[去中心化]

ZK中通过ISR维护着所有Follower,Follower通过Tcp与ZK保持心跳

副本因子

KAFKA逻辑架构设计

0 人点赞