什么是Kafka

Posted 夏初夏那

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是Kafka相关的知识,希望对你有一定的参考价值。

什么是Kafka

概念


网址: Kafka 官网

描述:

  1. Kafka是由Apache软件基金会开发的一个开源流处理平台,由ScalaJava编写。
  2. Kafka是一种高吞吐量分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。

Kafka的优点


1、解耦:允许我们独立的扩展或修改列两边的处理过程

2、扩展性: 因为消息队列解耦了你的处理过程,所以增大消息入队和处理的频率是很容易的,只要另外增加处理过程即可。

3、流量削峰:高流量的时候,使用消息队列作为中间件可以将流量的高峰保存在消息队列中,从而防止了系统的高请求,减轻服务器的请求处理压力。

4、可恢复性:即使一个处理消息的进程挂掉,加入队列中的消息仍可以在系统恢复后被处理。

5、顺序保证: 在大多使用场景下,数据处理的顺序都很重要。大部分消息队列本来就是排序的,并且能保证数据会按照特定的顺序来处理。Kafka保证一个Partition内的消息的有序性。

6、缓冲:有助于解决生产消息和消费消息的处理速度不一致的情况

7、异步通信:消息队列允许用户把消息放入队列但不立即处理它

设计目标


1、以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能。

2、高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输。

3、支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输。

4、同时支持离线数据处理和实时数据处理。

5、支持在线水平扩展

异步通信原理


观察者模式

  • 描述

    • 观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe)
  • 注意

    • 定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。
    • 一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。
  • 图解

生产者消费者模式

  • 传统模式

    • 生产者直接将消息传递给指定的消费者
    • 耦合性特别高,当生产者或者消费者发生变化,都需要重写业务逻辑
  • 生产者消费者模式

    • 通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而
      通过阻塞队列来进行通讯
    • 图解
  • 数据传递流程

    • 生产者消费者模式,即N个线程进行生产,同时N个线程进行消费,两种角色通过内存缓冲区进行通信,

    • 生产者负责向缓冲区里面添加数据单元

    • 消费者负责从缓冲区里面取出数据单元

      • 一般遵循先进先出的原则

缓冲区


  • 解耦

    • 假设生产者和消费者分别是两个类。如果让生产者直接调用消费者的某个方法,那么生产者对于消费者就会产生依赖
  • 支持并发

    • 生产者直接调用消费者的某个方法过程中函数调用是同步的
    • 万一消费者处理数据很慢,生产者就会白白糟蹋大好时光
  • 支持忙闲不均

    • 缓冲区还有另一个好处。如果制造数据的速度时快时慢,缓冲区的好处就体现出来了。
    • 当数据制造快的时候,消费者来不及处理,未处理的数据可以暂时存在缓冲区中。
    • 等生产者的制造速度慢下来,消费者再慢慢处理掉。

数据单元


  • 关联到业务对象

    • 数据单元必须关联到某种业务对象
  • 完整性

    • 就是在传输过程中,要保证该数据单元的完整
  • 独立性

    • 就是各个数据单元之间没有互相依赖
    • 某个数据单元传输失败不应该影响已经完成传输的单元;也不应该影响尚未传输的单元。
  • 颗粒度

    • 数据单元需要关联到某种业务对象。那么数据单元和业务对象应该处于的关系(一对一?一对多)
    • 如果颗粒度过小会增加数据传输的次数
    • 如果颗粒度过大会增加单个数据传输的时间,影响后期消费

消息系统原理


点对点消息传递

  • 在点对点消息系统中,消息持久化到一个队列中。

  • 此时,将有一个或多个消费者消费队列中的数据。但是一条消息只能被消费一次

  • 当一个消费者消费了队列中的某条数据之后,该条数据则从消息队列中删除

  • 该模式即使有多个消费者同时消费数据,也能保证数据处理的顺序

  • 基于推送模型的消息系统,由消息代理记录消费状态。

    • 消息代理将消息推送(push)到消费者后,标记这条消息为已经被消费,但是这种方式无法很好地保证消费的处理语义。

发布订阅消息传递

  • 在发布-订阅消息系统中,消息被持久化到一个topic中。
  • 消费者可以订阅一个或多个topic,消费者可以消费该topic中所有的数据,同一条数据可以被多个消费者消费,数据被消费后不会立马删除
  • 在发布-订阅消息系统中,消息的生产者称为发布者,消费者称为订阅者
  • Kafka 采取拉取模型(Poll),由自己控制消费速度,消费者可以按照任意的偏移量进行消费。


到底了。。。

以上是关于什么是Kafka的主要内容,如果未能解决你的问题,请参考以下文章

kafkakafka 消费速度 于 日志清理速度 (kafka数据被清理了)会发生什么 auto.offset.reset 参数

KafkaKafka工作原理

KafkaKafka架构设计之组件详解

KafkaKafka架构设计之组件详解

kafkakafka CoordinatorClient类与CoordinatorRestResource类的使用与介绍

kafkakafka 消费数据的时候 报错 (Re-) join group