前言

kafka属于分布式的消息引擎系统,主要功能是提供一套完备的消息发布与订阅解决方案。

消息和批次

  • kafka 的数据单元被称为消息。消息由字节数组组成,对kafka来说,消息里的数据没有特殊的格式或含义。消息可以有一个可选的元数据,也就是。键也是一个字节数组,与消息一样,对kafka来说没有特殊含义。当需要以一种可控的方式将消息写入不同的分区时,需要用到键。最简单的例子就是为键生成一个一致性哈希值,然后用哈希值对主题分区数进行取模,为消息选取分区。这样可以保证具有相同键的消息总是会被写到相同的分区中(前提是分区数量没有发生变化)。
  • 为了提高效率,消息会被分成批次写入 Kafka。批次包含了一组属于同一个主题和分区的消息。

主题和分区

  • 在kafka中,发布订阅的对象是Topic(主题),可以为每个业务、每个应用甚至每类数据都创建专属的主题。
  • 主题可以被分为若干个分区,一个分区就是一个提交日志。消息会以追加的方式被写入分区,然后按照先入先出的顺序读取。
  • 由于一个主题一般包含几个分区,因此无法在整个主体范围内保证消息的顺序,但可以保证消息在单个分区内是有序的。
  • kafka使用消息日志(Log)来保存数据,一个日志就是硬盘上一个只能追加写(Append Only)消息的物理文件。因为只能追加下,因此避免了缓慢的随机IO操作,改为性能较好的顺序写操作。
  • 一条日志被细分为多个日志段(LogSegment),消息被追加写到最新的日志段中。当写满一个日志段后,kafka自动切分出一个新的日志段,并封存老的日志段。
  • kafka在后台会定期检查老的日志段能否被删除。
  • kafka通过分区来实现数据的冗余和伸缩。分区可以分布在不同的服务器上,也就是说,一个主题可以横跨多台服务器,以此来提供比单台服务器更强的性能。
  • 分区可以被复制,相同分区的多个副本可以保存在多台服务器上,以防其中一台服务器发生故障。
  • 我们通常会使用这个词来描述kafka这类系统中的数据。

生产者和消费者

  • 向主题发布消息的客户端称为生产者,生产者通常持续不断地向一个或多个主题发送消息。默认情况下,生产者会把消息均衡地分布到主题的所有分区中。不过,在某些情况下,生产者会把消息直接写入指定的分区,这通常是通过消息键和分区器来实现的。
  • 分区器会为键生成一个哈希值,并将其映射到指定的分区,这样可以保证包含同一个键的消息被写入同一个分区。
  • 订阅主题读取消息的客户端被称为消费者
  • 生产者向分区写入消息,每条消息在分区中的位置信息由一个叫偏移量(Offset)的数据来表征。分区偏移量总是从0开始。消费者通过检查消息的偏移量来区分消息是否已读取。
  • 消费者组,指的是多个消费者实例共同组成一个组来消费一组主题。这组主题中的每个分区都只会被组内的一个消费者实例消费,其它消费者实例不能消费它。
  • 假设消费者组内的一个实例挂了,kafka会自动将Failed实例之前消费的数据转移给其它活着的消费者,此机制称为“重平衡”。

broker和集群

  • 一个单独的kafka服务端被称为broker。broker 会接收来自生产者的消息,为其设置偏移量,并提交到磁盘保存。broker 会为消费者提供服务,对读取分区的请求做出响应,并返回已经发布的消息。
  • 多个broker组成了集群。每个集群都有一个同时充当集群控制器角色的broker(自动从活动的集群成员中选举出来)。控制器负责管理工作,包括为broker分配分区和监控broker。
  • 备份(Replication)是把相同的数据拷贝到多台机器上,这些相同的数据称为副本(replica)。
  • kafka定义了两类副本:领导者副本(leader replica)和追随者副本(follower replica)。前者对外提供与客户端交互的服务,后者只被动同步领导者副本的数据,不提供与客户端交互的服务。生产者总是向领导者副本写消息,消费者总是从领导者副本读消息。追随者副本总是向领导者副本发送请求,领导者把消息同步给追随者。
  • 在集群中,一个分区从属于一个broker,这个broker被称为分区的领导者。一个被分配给其它broker的分区副本叫作这个分区的追随者。
  • 所有想要发布消息的生产者必须连接到领导者,但消费者可以从领导者或者追随者那里读取消息。

补充

  • kafka不只是一个消息引擎系统,也是一个流处理平台。
  • broker默认的消息保留策略是这样的:要么保留一段时间,要么保留消息总量达到一定的字节数。当消息数量达到这些上限时,就消息就会过期并被删除。主题可以设置自己的保留策略。我们可以把主题配置成紧凑型日志,只有最后一条带有特定键的消息会被保留下来。
  • kafka为多集群提供了一个叫作mirrormaker的工具,用于将一个集群的数据同步给另一个集群。

参考

  • 极客时间 - kafka核心技术与实战 - 胡夕
  • kafka权威指南

[kafka]常见术语的更多相关文章

  1. 大数据之kafka-02.搞定kafka专业术语

    02.搞定kafka专业术语 在kafka的世界中有很多概念和术语是需要我们提前理解并且熟练掌握的,下面来盘点一下. 之前我们提到过,kafka属于分布式的消息引擎系统,主要功能是提供一套完善的消息发 ...

  2. 应用角度看kafka的术语和功能

    kafka的术语(Terminology) Topic 和Consumer Group Topic 每条发布到 Kafka 集群的消息都有一个类别,这个类别被称为 Topic.(物理上不同 Topic ...

  3. IdentityServer4系列 | 常见术语说明

    一.前言 在上一篇中,我们IdentityServer4的说明,认识到是一个基于OpenID Connect协议标准的身份认证和授权程序,并简单的对基础知识的认识以及区别说明,从OAuth.OpenI ...

  4. Spark 学习笔记1 (常见术语 )

    本来没打算学Spark 的,不过时机很逗. 最膜拜的大神做spark分享,还是其中最好玩的notebook.这不就是另外一个 HUE吗,但感觉更好玩. 刚好新的Spark 2.x 要问世了,大神在组织 ...

  5. istio之envoy常见术语及状态码

    基本术语 Downstream(下游):下游主机连接到 Envoy,发送请求并接收响应,即发送请求的主机. Upstream(上游):上游主机接收来自 Envoy 的连接和请求,并返回响应,即接受请求 ...

  6. GPS导航仪常见术语解释

    摘自百度百科: 坐标(coordinate) 有2维.3维两种坐标表示,当GPS能够收到4颗及以上卫星的信号时,它能计算出本地的3维坐标:经度.纬度.高度,若只能收到3颗卫星的信号,它只能计算出2维坐 ...

  7. H264常见术语名称

    一.术语 帧(frame)和场(field):一帧包含一个亮度矩阵采样点和俩个对应的色度矩阵采样点,一帧包含俩个场:顶场和底场: 条带:特定条带组按光栅扫描顺序排列的整数个宏块或宏块对: 条带组:图像 ...

  8. php常见术语

    什么是PHP? php是Hypertext Preprocessor的缩写,php是一种内嵌 HTML的脚本语言.PHP的独特语法混合了c,java和perl及PHP式的新语法.这门语言的的目标是让网 ...

  9. Kafka常见错误整理(不断更新中)

    1.UnknownTopicOrPartitionException org.apache.kafka.common.errors.UnknownTopicOrPartitionException: ...

  10. kafka常见命令

    基础命令 查看已有topic 进入kafka解压目录:/home/zallds/kafka_2.10-0.10.2.1 执行如下命令,就会列出所有topic [zallds@PUBLIC-26 bin ...

随机推荐

  1. 【Python基础】字典的基本使用

    字典是由一系列键值对组成的无序集合.每个键值对包含一个键和一个对应的值.键必须是不可变的,如字符串.数字或元组.值可以是任意类型的对象.字典可以使用花括号({})或者内置函数dict()来创建. di ...

  2. 2023-01-03:超过5名学生的课。编写一个SQL查询来报告 至少有5个学生 的所有班级,返回结果不限顺序。请问sql语句如何写? +---------+ | class | +-----

    2023-01-03:超过5名学生的课.编写一个SQL查询来报告 至少有5个学生 的所有班级,返回结果不限顺序.请问sql语句如何写? ±--------+ | class | ±--------+ ...

  3. 爆肝一周,我开源了ChatGPT 中文版接口,官方1:1镜像支持全部 官方接口

    这里实现我之前文章承诺承接上文 人人实现ChatGPT自由,手把手教你零撸部署自己聊天私服 现在ChatGPT 提供了api接口 可以让我自己对接去实现我们自己想要gpt应用,但是由于一些原因,国内也 ...

  4. 【GiraKoo】Github无法打开,导致无法下载Git安装包

    环境 Windows 11 原因 Git应用的安装程序在Github上,由于Github访问不稳定,导致无法下载. 对策 打开迅雷.将下载链接拷贝进去,利用迅雷的P2P技术,从其他网友处进行下载. 打 ...

  5. Flutter三棵树系列之详解各种Key

    简介 key是widget.element和semanticsNode的唯一标识,同一个parent下的所有element的key不能重复,但是在特定条件下可以在不同parent下使用相同的key,比 ...

  6. 通过命令行创建ACFS文件系统

    其实使用asmca图形创建ACFS文件系统既简单又不容易出错,但是考虑到某些客户场景不允许我们调取图形,所以本文演示下通过命令行创建ACFS文件系统的步骤. 可以通过MOS搜索到下面这篇文档: ASM ...

  7. Anaconda 使用的一些体验与困惑

    Channels 使用 需要注意的是做生信分析的童鞋使用 conda 环境时一定要特别注意 conda channels 的设置,滥用 channels 很有可能会导致你的软件升降级(甚至环境)错乱. ...

  8. tryhackme-Agent Sudo

    描述:您在深海下发现了一个秘密服务器.你的任务是侵入服务器内部并揭露真相. 枚举 nmap -sV -T4 -v 10.10.123.164 NSE: Script scanning 10.10.12 ...

  9. Vue——表单控制、购物车案例、v-model进阶、与后端交互三种方式、箭头函数

    表单控制 // 1 checkbox 单选 多选 // 2 radio 单选 <body> <div id="app"> <h1>checkbo ...

  10. k8s实战案例之部署Zookeeper集群

    1.Zookeeper简介 zookeeper是一个开源的分布式协调服务,由知名互联网公司Yahoo创建,它是Chubby的开源实现:换句话讲,zookeeper是一个典型的分布式数据一致性解决方案, ...