前言

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. 2023-05-01:给你一个整数 n , 请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字。 1 <= n <=

    2023-05-01:给你一个整数 n , 请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字. 1 <= n ...

  2. 2020-09-16:谈谈TCP的控制位?

    福哥答案2020-09-16:#福大大架构师每日一题# 福哥口诀法:紧确推和复同终(紧急位URG,确认位ACK,推送位PSH,复位位RST,同步位SYN,终止位FIN). [答案来自此链接](http ...

  3. Django-3:创建子项目APP

    django-admin startapp app01 或 python manage.py startapp app01 #app01 是app名称 PyCharm的样子:

  4. vue项目连接socket.io跨域及400异常处理

    最近看人家用socket.io聊天,于是自己也想打个服务试试,不试不知道,一试吓一跳,原来这里吗还有这么多坑,下面就是所遇的坑,记录一哈,但愿可以帮助到遇到同样的坑的小伙伴 文章目录 一.服务端配置 ...

  5. 探索JS中this的最终指向

    js 中的this 指向 一直是前端开发人员的一个痛点难点,项目中有很多bug往往是因为this指向不明确(this指向在函数定义时无法确定,只有在函数被调用时,才确定该this的指向为最终调用它的对 ...

  6. Anaconda 环境下 R 包 ggraph_1.0.2 安装小记

    由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. 记录一下今天在 Anaconda3 环境下 R==3.4.3 中安装 ggraph 的一些问题 ...

  7. Kubernetes(k8s)服务service:service的发现和service的发布

    目录 一.系统环境 二.前言 三.Kubernetes service简介 四.使用hostPort向外界暴露应用程序 4.1 创建deploy 4.2 使用hostPort向外界暴露pod的端口 五 ...

  8. 曲线艺术编程 coding curves 第八章 贝赛尔曲线(Bézier Curves)

    贝赛尔曲线(Bézier Curves) 原作:Keith Peters https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中物王二狗(s ...

  9. Python运维开发之路《编程》

    一.编程思想介绍 1.编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现 ...

  10. .NET 5 的烦恼

    由于微软工程师的辛勤脑洞和劳作,.NET 生态如何演变完全看他们的决策,其中包含社区吸纳内容.团队讨论结果等等,不乏一些工程师.架构师偏好,很难摸得准.   就比如这一次未来规划,他们希望将 .NET ...