Kafka流处理平台

什么是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)