Kafka基本概念

文章目录

    • 概要
    • 整体架构
    • broker和集群
    • Producer
    • Consumer和消费者组
    • 小结

概要

Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多生产者、多订阅者,基于
zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等。
主要应用场景是:日志收集系统和消息系统。
Kafka主要设计目标如下:

  • 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访
    问性能。
  • 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输。
  • 支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输。同时支持离线数据处理和实时数据处理。

本文主要是介绍kafka整体框架上的一些基本概念

整体架构

消息传递模式只要有两种:点对点传递模式、发布-订阅模式。
大部分的消息系统选用发布-订阅模式。Kafka就是一种发布-订阅模式。
对于消息中间件,消息分推拉两种模式。Kafka只有消息的拉取,没有推送,消费者端通过轮询从broker端获取数据

服务端(brokers)和客户端(producer、consumer)之间通信通过TCP协议来完成。

在这里插入图片描述

Broker

  • 一个独立的Kafka服务器称为broker。一个或者多个broker可以组成kafka集群
  • broker接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。
  • broker为消费者提供服务,对读取分区的请求做出响应,返回已经提交到磁盘上的消息。

Topic

  • Kafka根据topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一个topic
  • 主题可比是数据库的表或者文件系统里的文件夹。
  • 主题可以被分为若干分区,一个主题通过分区分布于Kafka集群中,提供了横向扩展的能力

Partition

  • 主题可以被分为若干个分区,一个分区就是一个提交日志。
  • 消息以追加的方式写入分区,然后以先入先出的顺序读取。
  • Kafka 通过分区来实现数据冗余和伸缩性。

Replicas

  • Kafka 使用主题来组织数据,每个主题被分为若干个分区,每个分区有多个副本。
  • 副本被保存在broker 上,每个broker 可以保存成百上千个属于不同主题和分区的副本。
  • 副本有以下两种类型:
    首领副本:每个分区都有一个首领副本。为了保证一致性,所有生产者请求和消费者请求都会经过这个副本。
    跟随者副本:首领以外的副本都是跟随者副本。跟随者副本不处理来自客户端的请求,它们唯一的任务就是从首领那里复制消息,保持与首领一致的状态。如果首领发生崩溃,其中的一个跟随者会被提升为新首领。

Producer
消息生产者,向Broker发送消息的客户端

Consumer

消息消费者,从Broker读取消息的客户端

Consumer Group

每个Consumer属于一个特定的ConsumerGroup,一条消息可以被多个不同的
Consumer Group消费,但是一个Consumer Group中只能有一个Consumer能够消费同一条消息

broker和集群

一个独立的Kafka服务器称为broker

在这里插入图片描述
每个集群都有一个broker是集群控制器(从集群的活跃成员中选举出来)
控制器负责管理工作:

  • 将分区分配给broker
  • 监控broker
  • 当某个分区的leader副本出现故障时,由控制器负责为该分区选举新的leader副本。
  • 当检测到某个分区的ISR集合发生变化时,由控制器负责通知所有broker更新其元数据信息。

Producer

  • producer采用push模式将消息发布到broker,每条消息都被append到patition中,属于顺序写磁盘(顺序写磁盘效率比随机写内存要高,保障kafka吞吐率)。
  • producer 发送消息到 broker 时,会根据分区算法选择将其存储到哪一个 partition。其路由机制为:
    1. 指定了 patition,则直接使用;
    2. 未指定 patition 但指定 key,通过对 key 的 value 进行hash 选出一个 patition
    3. patition 和 key 都未指定,使用轮询选出一个 patition。
    4. 默认使用轮询的方式

Consumer和消费者组

从broker端读取消息的客户端,称为消费者;具有相同group.id的消费者,属于同一个消费组。一般来说,项目中用到的消费者都是以消费者组的形式存在的;一个消费者组含义一个或者多个消费者,抽象出组的概念对已broker端来说大有益处,broker端不需要关心有多少个消费者,始终以群组为单位来记录消费的位移信息

分区与消费者之间的关系大致存在以下图中几种:

在这里插入图片描述
这里需要注意:

  • 消费组均衡地给消费者分配分区,每个分区只由消费组中一个消费者消费
  • 如果消费者比分区多,就会出现闲置的现象
  • 组与组之间的消费互不影响

小结

本文主要从大方面总结了kafka各个主要概念;消费者如何消费,生产者发送消息流程是怎么样,位移是如何管理的,这些细节内容会在后面的文章中进行补充。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/66790.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文解析超标量处理器

一、引言 处理器(central process unit,简称CPU)是手机的核心部件,其主要功能是取指令并译码执行。CPU主要包括控制器和运算器两个部件,它对在手机中的所有硬件资源(如存储器,输入输出单元)进行…

设计师常用的UI设计软件推荐

如今,随着互联网时代设计岗位的演变,近年来出现了一位新兴而受欢迎的专业UI设计师。对于许多对UI设计感兴趣或刚刚接触UI设计的初学者来说,他们不禁想知道,成为一名优秀的UI设计师需要掌握哪些UI软件?今天,…

Docker自动化部署安装(十)之安装SonarQube

这里选择的是: sonarqube:9.1.0-community (推荐使用) postgres:9.6.23 数据库(sonarqube7.9及以后便不再支持mysql,版本太低的话里面的一些插件会下载不成功的) 1、docker-sonarqube.yml文件 version: 3 services:sonarqube:container_name: sonar…

基于dbn+svr的交通流量预测,dbn详细原理

目录 背影 DBN神经网络的原理 DBN神经网络的定义 受限玻尔兹曼机(RBM) DBN+SVR的交通流量预测 基本结构 主要参数 数据 MATALB代码 结果图 展望 背影 DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,是一种非常好的分类算法,本文将DBN+SVR用于交通流量预测…

使用Java根据表名导出与导入Sql

前言 很粗糙啊,有很多可以优化的地方,而且也不安全,但是临时用还是OK的,我这个是公司里面的单机软件,不联网。 嗨!我是一名社交媒体增长黑客,很高兴能帮助您优化和丰富关于批量作业导出和导入…

LeetCode 31题:下一个排列

目录 题目 思路 代码 题目 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如,arr [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序…

12 注册登录

12 注册登录 整体概述 使用数据库连接池实现服务器访问数据库的功能,使用POST请求完成注册和登录的校验工作。 本文内容 介绍同步实现注册登录功能,具体涉及到流程图、载入数据库表、提取用户名和密码、注册登录流程与页面跳转的代码实现。 流程图&a…

手机的发展历史

目录 一.人类的通信方式变化 二.手机对人类通信的影响 三.手机的发展过程 四.手机对现代人的影响 一.人类的通信方式变化 人类通信方式的变化是一个非常广泛和复杂的话题,随着技术的进步和社会的发展,人类通信方式发生了许多重大的变化。下面是一些主…

掌握Python的X篇_32_使用python编辑pdf文件_pdfrw

本篇介绍利用python操作pdf文件,我们平时也会有合并和拆分pdf的需求,此时我们就可以使用本节内容。 文章目录 1. pdfrw的安装2. 切分pdf文件3. pdfrw官网及实现一版四面的实例 1. pdfrw的安装 pip install pdfrw官网地址:https://github.co…

Amazon EMR Hudi 性能调优——Clustering

随着数据体量的日益增长,人们对 Hudi 的查询性能也提出更多要求,除了 Parquet 存储格式本来的性能优势之外,还希望 Hudi 能够提供更多的性能优化的技术途径,尤其当对 Hudi 表进行高并发的写入,产生了大量的小文件之后&…

痞子衡嵌入式:AppCodeHub - 一站网罗恩智浦MCU应用程序

近日,恩智浦官方隆重上线了应用程序代码中心(Application Code Hub,简称 ACH),这是恩智浦 MCUXpresso 软件生态的一个重要组成部分。痞子衡之所以要如此激动地告诉大家这个好消息,是因为 ACH 并不是又一个恩智浦官方 github proje…

大数据课程J1——Scala的概述

文章作者邮箱:yugongshiyesina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Scala的特点; ⚪ 了解Scala的开发环境搭建; ⚪ 了解Scala的开发工具; 一、概述 1.简介 Scala既是面向对象的语言,…