• java
  • go
  • 数据库
  • linux
  • 中间件
  • 书
  • 源码
  • 夕拾

  • java
  • go
  • 数据库
  • linux
  • 中间件
  • 书
  • 源码
  • 夕拾

kafka-基础

目录

  • 目录
  • kafka简介
    • 诞生背景
      • kafka与流
      • kafka特性
    • kafka术语
    • kafka高可用
      • kafka中的副本
      • 副本的工作机制
    • kafka伸缩性
    • broker持久化
  • kafka的分类
    • apache kafka
    • confluent kafka
    • cdh/hdp kafka

kafka简介

诞生背景

Kafka 是 LinkedIn 公司内部孵化的项目。LinkedIn 最开始有强烈的数据强实时处理方面的需求,其内部的诸多子系统要执行多种类型的数据处理与分析,主要包括业务系统和应用程序性能监控,以及用户行为数据处理等。

kafka的语言,kafka原来由scala语言编写,后来社区来了一批javaer,就改java重写了客户端.

kafka与流

Kafka 在承接上下游、串联数据流管道方面发挥了重要的作用:所有的数据几乎都要从一个系统流入 Kafka 然后再流向下游的另一个系统中。这样的使用方式屡见不鲜以至于引发了 Kafka 社区的思考:与其我把数据从一个系统传递到下一个系统中做处理,我为何不自己实现一套流处理框架呢?基于这个考量,Kafka 社区于 0.10.0.0 版本正式推出了流处理组件 Kafka Streams,也正是从这个版本开始,Kafka 正式“变身”为分布式的流处理平台,而不仅仅是消息引擎系统了。今天 Apache Kafka 是和 Apache Storm、Apache Spark 和 Apache Flink 同等级的实时流处理平台。

流平台的优势:

  1. 更容易实现端到端的正确性(Correctness)要实现正确性和提供能够推导时间的工具。实现正确性是流处理能够匹敌批处理的基石。
  2. 它自己对于流式计算的定位。官网上明确标识 Kafka Streams 是一个用于搭建实时流处理的客户端库而非是一个完整的功能系统。这就是说,你不能期望着 Kafka 提供类似于集群调度、弹性部署等开箱即用的运维特性,你需要自己选择适合的工具或系统来帮助 Kafka 流处理应用实现这些功能。

kafka特性

Kafka 在设计之初就旨在提供三个方面的特性:

  • 提供一套 API 实现生产者和消费者;
  • 降低网络传输和磁盘存储开销;
  • 实现高伸缩性架构。

kafka术语

  • topic:发布订阅的主题
  • producer:向主题发布消息的客户端应用程序
  • consumer:订阅主题消息的客户端
  • clients: producer与consumer
  • broker: kafka的服务器,一个kafka集群由多个broker组成.每个broker负责接收和处理客户端的请求,以及对消息进行持久化.
  • partitioning:领导者副本分片
  • offset: 表示分区中每条消息的位置信息,是一个单调递增且不变的值
  • consumer offset: 表征消费者消费进度,每个消费者都有自己的消费者位移。
  • consumer group: 多个消费者实例共同组成的一个组,同时消费多个分区以实现高吞吐。
  • rebalance: 消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。Rebalance 是 Kafka 消费者端实现高可用的重要手段。

kafka高可用

  • 集群化
  • 备份机制(replication)

kafka中的副本

kafka中,将备份的副本定义为两类:

  1. 领导者副本(leader replica),对外提供服务(与客户端交互)
  2. 追随者副本(follower replica),追随领导者副本(不与客户端交互)

副本的工作机制

生产者向领导者副本写数据,消费者从领导者副本读数据.
追随者副本只向领导者发送同步数据请求.保持数据同步.

kafka伸缩性

partitioning

  1. Kafka 中的分区机制指的是将每个主题划分成多个分区(Partition),每个分区是一组有序的消息日志。
  2. 每个分区的N个副本只有一个能充当领导者,对外提供服务;其他n-1是追随者副本
  3. 分区中包含若干消息,每条消息从0开始,依次递增.
  4. 客户端只能与分区的领导者进行交互.

broker持久化

kafka使用消息日志(log)来保存数据.
一个日志就是磁盘上一个只能追加写(append-only)消息的物理文件.
(因为只能追加写入,故避免了缓慢的随机 I/O 操作,改为性能较好的顺序 I/O 写操作,这也是实现 Kafka 高吞吐量特性的一个重要手段。)
kafka底层将日志分段,进行磁盘回收.

kafka的分类

apache kafka

如果你仅仅需要一个消息引擎系统亦或是简单的流处理应用场景,
需要对系统有较大把控度

confluent kafka

免费版:http方式调用kafka功能,消息格式向前/后兼容.
企业版:跨数据中心备份,集群监控
未在国内开展业务.文档少

cdh/hdp kafka

大数据云公司包装的kafka,集成监控,运维,管理.
集群掌控度低,版本滞后

es的相关配置
kafka-集群部署
  1. 1. 目录
  2. 2. kafka简介
    1. 2.1. 诞生背景
      1. 2.1.1. kafka与流
      2. 2.1.2. kafka特性
    2. 2.2. kafka术语
    3. 2.3. kafka高可用
      1. 2.3.1. kafka中的副本
      2. 2.3.2. 副本的工作机制
    4. 2.4. kafka伸缩性
    5. 2.5. broker持久化
  3. 3. kafka的分类
    1. 3.1. apache kafka
    2. 3.2. confluent kafka
    3. 3.3. cdh/hdp kafka
© 2023 haoxp
Hexo theme