Kafka入门

Kafka官网

消息队列

在高并发的应用场景中,由于来不及同步处理请求,接收到的请求往往会发生阻塞。例如,大量的插入、更新请求同时到达数据库,这会导致行或表被锁住,最后会因为请求堆积过多而触发“连接数过多的异常”(Too Many Connections)错误。因此,在高并发的应用场景中需要一个缓冲机制,而消息队列则可以很好地充当这样一个角色。
消息队列采用异步通信机制。即,消息的发送者和接收者无须同时与消息队列进行数据交互,消息会一直保存在队列中,直至被接收者读取。每一条消息记录都包含详细的数据说明,包括数据产生的时间、数据类型、特定的输入参数

消息队列的作用

  • 应用解耦
  • 异步处理
  • 数据限流
  • 异步通信

Kafka基本概念

Kafka是一个分布式实时处理流平台,可独立部署在单台机器上或者部署在多台机器上形成集群。
它提供了发布订阅功能,可以从Kafka集群读取数据或者保存数据到Kafka。

  • 代理(broker)
    在Kafka集群中,一个Kafka实例被称为一个代理(broker)节点。代理节点是消息队列常用的一个概念。
  • Producer
    Procucer 可以将指定消息发送到某个topic或者根据算法发送到指定partition
  • Consumer
    Consumer消费者从指定topic读取消息记录。在读取Topic数据时需要设置GroupId 否则会默认生成一个GroupId
    一个读取Kafka消息的实例可称为一个消费者。
  • Consumer Group
    消费者组。消费者程序在读取topic数据时,通常会使用多个线程来执行。一个消费者组可以包含一个或者多个消费者程序。使用多分区和多线程模式可以提供读取速度。
    一般来说一个消费者对应一个线程。
    出现背景:举个例子,现有这样一个场景:客户端从Kafka系统中读取消息记录,并且进行业务逻辑处理,最后将处理后的结果输出。
    可以创建一个消费者程序来实现这样一个场景。但是,当生产者向Kafka系统主题写消息数据的速度比消费者读取的速度要快时,随着时间的增长,主题中的消息数据将出现越来越严重的堆积现象。
    面对这类情况,通常可以增加多个消费者程序来水平扩展,从而解决这种堆积现象。
    消费者组是Kafka系统提供的一种可扩展、高容错的消费者机制。
  • topic
    主题,主要用来区分不同业务类型的记录
    Kafka系统中的数据最终还需要保存到磁盘进行持久化。为了区分不同的业务数据,数据库会有命名空间(即:数据库名),每个命名空间下又有若干个表。
    在Kafka系统中,为了区分业务数据,设计了“主题”这个概念。将不同类型的消息数据按一定的规则进行分类,最后将相同类型的业务数据存储到同一个主题中
  • Partition
    分区。一个Topic可以有多个partition。在Kafka设计思想中,partition对应物理层面,不同分区对应不同文件。
    每个分区对应的消息是有序的。每个消息在各自的分区上对应不同的数据偏移量offset。
    在Kafka系统中,为何要在主题中加入分区和副本的概念呢?“主题”是一个逻辑概念,而“分区”则是一个物理概念。
    一个partition只对应一个Broker,一个Broker可以包含不同Partition.
    从性能方面来说,如果主题内消息数据只存储在一个代理节点,那该节点将很快会成为Kafka集群的瓶颈,无法实现水平扩展。因此,把主题内的消息数据分布到整个Kafka集群就是一件很重要的事情,而分区的引入则很好地解决了水平扩展的问题。
    Topic 的每个partition可以被认为是一个无限长度的数组,新来的消息数据可以有序地追加到该数组上。从物理意义上讲,每个partition对应一个文件夹。一个Kafka代理节点上可以存放多个partition。这样,Producer可以将消息数据发送到多个broker上的多个partition,Consumer也可以并行地从多个代理节点上的不同partition获取数据,实现水平扩展.
  • Replication
    副本。每个Topic在创建的时候都会有指定的副本数。默认是1.来保证Kafka系统的高可用性。
    一个主题拥有多个副本,可以很好地避免数据丢失的风险
  • Record
    记录。写到Kafka集群,并可被消费者读取的信息称为record。
    每条记录包含一个key ,value ,timestamp.

kafka 应用场景

  • Messaging
    消息系统。如同ActiveMQ RabbitMQ
  • website activity tracking
    网站活动估计追踪
  • Metrics
    可以用来监控数据
  • Log Aggregation
    日志收集
  • Stream Processing
    实时流处理

Kafka4种核心API

Kafka有四个核心APIs.
即:生产者,消费者,连接器,实时处理器
Kafka入门

注意

在 Kafka系统中,主题的partition只能增加不能减少。