kafka详解

作者: 不怕天黑_0819 | 来源:发表于2021-05-13 10:53 被阅读0次

目录

  • Kafka 是什么
  • Kafka 核心组
  • Kafka 整体架构以及解析
  • Kafka数据处理步骤
  • Kafka名词解释和工作方式
  • Consumer与topic关系
  • Kafka消息的分发
  • Consumer的负载均衡

Kafka 是什么

  • Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目,该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。
  • Kafka是一个分布式消息队列:生产者、消费者的功能。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。
  • Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为broker。无论是kafka集群,还是producer和consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性

Kafka 核心组件

  • Producer:消息生产者,产生的消息将会被发送到某个topic
  • Consumer:消息消费者,消费的消息内容来自某个topic
  • Topic:消息根据topic进行归类,topic其本质是一个目录,即将同一主题消息归类到同一个目录
  • Broker:每一个kafka实例(或者说每台kafka服务器节点)就是一个broker,一个broker可以有多个topic

Zookeeper:zookeeper集群不属于kafka内的组件,但kafka依赖zookeeper集群保存meta信息,所以在此做声明其重要性。

Kafka 整体架构以及解析

Kafka数据处理步骤

  • 1、Producer产生消息,发送到Broker中
  • 2、Leader状态的Broker接收消息,写入到相应topic中
  • 3、Leader状态的Broker接收完毕以后,传给Follow状态的Broker作为副本备份
  • 4、Consumer消费Broker中的消息

Kafka名词解释和工作方式

  • Producer
    消息生产者,就是向kafka broker发消息的客户端。

  • Consumer
    消息消费者,向kafka broker取消息的客户端

  • Topic
    可以理解为一个队列。

  • Consumer Group (CG)
    这是kafka用来实现一个topic消息的广播(发给所有的consumer)和单播(发给任意一个consumer)的手段。一个topic可以有多个CG。topic的消息会复制(不是真的复制,是概念上的)到所有的CG,但每个partion只会把消息发给该CG中的一个consumer。如果需要实现广播,只要每个consumer有一个独立的CG就可以了。要实现单播只要所有的consumer在同一个CG。用CG还可以将consumer进行自由的分组而不需要多次发送消息到不同的topic。

  • Broker
    一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。

  • Partition
    为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序。

Consumer与topic关系

kafka只支持Topic

  • 每个group中可以有多个consumer,每个consumer属于一个consumer group;通常情况下,一个group中会包含多个consumer,这样不仅可以提高topic中消息的并发消费能力,而且还能提高"故障容错"性,如果group中的某个consumer失效那么其消费的partitions将会有其他consumer自动接管。
  • 对于Topic中的一条特定的消息,只会被订阅此Topic的每个group中的其中一个consumer消费,此消息不会发送给一个group的多个consumer;那么一个group中所有的consumer将会交错的消费整个Topic,每个group中consumer消息消费互相独立,我们可以认为一个group是一个"订阅"者。
  • 在kafka中,一个partition中的消息只会被group中的一个consumer消费(同一时刻);

一个Topic中的每个partions,只会被一个"订阅者"中的一个consumer消费,不过一个consumer可以同时消费多个partitions中的消息。

  • kafka的设计原理决定,对于一个topic,同一个group中不能有多于partitions个数的consumer同时消费,否则将意味着某些consumer将无法得到消息。

kafka只能保证一个partition中的消息被某个consumer消费时是顺序的;事实上,从Topic角度来说,当有多个partitions时,消息仍不是全局有序的。

Kafka消息的分发

  • Producer客户端负责消息的分发
  • kafka集群中的任何一个broker都可以向producer提供metadata信息,这些metadata中包含"集群中存活的servers列表"、"partitions leader列表"等信息;
  • 当producer获取到metadata信息之后, producer将会和Topic下所有partition leader保持socket连接;
  • 消息由producer直接通过socket发送到broker,中间不会经过任何"路由层"。事实上,消息被路由到哪个partition上由producer客户端决定,比如可以采用"random""key-hash""轮询"等。

如果一个topic中有多个partitions,那么在producer端实现"消息均衡分发"是必要的。

  • 在producer端的配置文件中,开发者可以指定partition路由的方式。
  • Producer消息发送的应答机制

设置发送数据是否需要服务端的反馈,有三个值0,1,-1

0: producer不会等待broker发送ack
1: 当leader接收到消息之后发送ack
-1: 当所有的follower都同步消息成功后发送ack
request.required.acks=0

Consumer的负载均衡

当一个group中,有consumer加入或者离开时,会触发partitions均衡.均衡的最终目的,是提升topic的并发消费能力,步骤如下:

  • 1、假如topic1,具有如下partitions: P0,P1,P2,P3
  • 2、加入group A 中,有如下consumer: C0,C1
  • 3、首先根据partition索引号对partitions排序: P0,P1,P2,P3
  • 4、根据consumer.id排序: C0,C1
  • 5、计算倍数: M = [P0,P1,P2,P3].size / [C0,C1].size,本例值M=2(向上取整)
  • 6、然后依次分配partitions: C0 = [P0,P1],C1=[P2,P3],即Ci = [P(i * M),P((i + 1) * M -1)]

参考链接:https://www.jianshu.com/p/1b657ac52f89

相关文章

  • Kafka配置详解

    kafka基本概念及配置详解 kafka 基本概念 Topic 主题,声明一个主题,producer指定该主题发布...

  • 每日一读 12.04

    Kafka新版消费组(consumer group)详解 http://www.aboutyun.com/foru...

  • kafka使用笔记

    Kafka新老版本命令行参数对比详解 新老版本Kafka启动方式(两者一致): 新版本Kafka命令行参数(kaf...

  • Kafka详解

    应大部分的小伙伴的要求,今天这篇咱们用大白话带你认识 Kafka。 Kafka 基础 消息系统的作用 大部分小伙伴...

  • Kafka详解

    Kafka Kafka 概述 kafka是什么? 在流式计算中,kafka一般用来储存缓存数据,Storm通过消费...

  • kafka详解

    目录 Kafka 是什么 Kafka 核心组 Kafka 整体架构以及解析 Kafka数据处理步骤 Kafka名词...

  • Kafka详解

    Kafka 是一个java开发的mq中间件,依赖于zookeper,有高可用,高吞吐量等特点。 优势 可靠性:pa...

  • 源码分析Kafka 消息拉取流程

    本节重点讨论 Kafka 的消息拉起流程。 @TOC 1、KafkaConsumer poll 详解 消息拉起主要...

  • Kafka配置文件详解

    Kafka配置文件详解 (1) producer.properties:生产端的配置文件 (2)consumer....

  • Kafka 详解(转)

    一、入门1、简介Kafka is a distributed,partitioned,replicated com...

网友评论

    本文标题:kafka详解

    本文链接:https://www.haomeiwen.com/subject/ojqtdktx.html