什么是kafka?
LinkedIn开源
- 分布式数据同步系统Databus
- 高性能计算引擎Cubert
- Java异步处理框架ParSeq
- Kafka流处理平台
Apache
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-torlerant 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 reliably get data between systems or applications
- building real-time streaming applications that transform or 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所有分区和副本的信息,处理kafkacontroller发起的一些请求,副本状态的切换、添加/读取信息等
partition
- 每一个topic被切分成多个partitions
- 消费者数目少于或等于partition的数目
- broker group中的每一个broker保存topic的一个或多个partitions
- consumer group中的仅有一个consumer读取topic的一个或多个partitions 并且是唯一的consumer
replication
- 当集群中有broker挂掉的情况,系统可以主动地使replicas提供服务
- 系统默认设置每一个topic的replication系数为1,可以在创建topic时单独设置
replication特点:
- replication的基本单位是topic的partition
- 所有的读和写都从leader进,followers只是作为备份
- follower必须能够及时复制leader的数据
- 增加容错性与可扩展性
kafka基本结构
- producer api
- consumer api
- streams api
- connectors api
kafka特点
分布式
- 多分区
- 多副本
- 多订阅者
- 基于ZooKeeper调度 高性能
- 高吞吐量
- 低延迟
- 高并发
- 时间复杂度O(1) 持久性与扩展性
- 数据可持久化
- 容错性
- 支持在线水平扩展
- 消息自动平衡
kafka应用场景
消息队列 行为跟踪
元信息监控
日志收集
流处理
事件源
持久性日志(commit log)