Java程序员面试必备——kafka的专业术语

主题 + 客户端

  1. 发布订阅的对象是主题(Topic)
  2. 向主题发布消息的客户端应用程序称为生产者(Producer),生产者可以持续不断地向多个主题发送消息
  3. 订阅这些主题消息的客户端应用程序称为消费者(Consumer),消费者能够同时订阅多个主题的消息
  4. 生产者和消费者统称为客户端

服务端

  1. Kafka的服务端由被称为Broker的服务进程构成,一个Kafka集群由多个Broker组成
  2. Broker负责接收和处理客户端发送过来的请求,以及对消息进行持久化
  3. 多个Broker进程能够运行在同一台机器上,但更常见的做法是将不同的Broker分散运行在不同的机器上
  • 这样如果集群中某一台机器宕机了,即使在它上面运行的所有Broker进程都挂掉了
  • 其他机器上的Broker也依然能够对外提供服务,这是Kafka提供高可用的手段之一

备份

  1. 实现高可用的另一个手段是备份机制(Replication)
  2. 备份:把相同的数据拷贝到多台机器上,这些相同的数据拷贝在Kafka中被称为副本(Replica)
  3. 副本的数量是可以配置的,Kafka定义了两类副本:领导者副本(Leader Replica)和追随者副本(Follower Replica)
  • 领导者副本:对外提供服务,对外指的是与客户端程序进行交互
  • 生产者总是向领导者副本写消息
  • 消费者总是从领导者副本读消息
  • 追随者副本:被动地追随领导者副本,不能与外界交互
  • 向领导者副本发送请求,请求领导者副本把最新生产的消息发给它,进而与领导者副本保持同步
  • MySQL的从库是可以处理读请求的
  • Master-Slave => Leader-Follower
  1. 副本机制可以保证数据的持久化或者消息不丢失,但没有解决伸缩性(Scalability)的问题
  • 如果领导者副本积累了太多的数据以至于单台Broker机器无法容纳,该如何处理?
  • 可以把数据分割成多份,然后保存在不同的Broker上,这种机制就是分区(Partitioning)
  • MongoDB、Elasticsearch – Sharding
  • HBase – Region

分区

  1. Kafka中的分区机制是将每个主题划分成多个分区(Partition),每个分区是一组有序的消息日志
  2. 生产者生产的每条消息只会被发送到一个分区中,Kafka的分区编号是从0开始的
  3. 副本是在分区这个层级定义的,每个分区下可以配置N个副本,只能有1个领导者副本和N-1个追随者副本
  4. 生产者向分区(分区的领导者副本)写入消息,每条消息在分区中的位置由位移(Offset)来表征,而分区位移总是从0开始
  5. 三层消息架构
  • 第一层是主题层,每个主题可以配置M个分区,而每个分区又可以配置N个副本
  • 第二层是分区
  • 每个分区的N个副本中只能有1个领导者副本,对外提供服务
  • 其他N-1个副本是追随者副本,只能提供数据冗余
  • 第三层是消息层,分区中包含若干条消息,每条消息的位移从0开始,依次递增
  • 最后,客户端程序只能与分区的领导者副本进行交互

持久化

  1. Kafka使用消息日志(Log)来保存数据,一个日志是磁盘上一个只能追加写(Append-Only)消息的物理文件
  • 只能追加写入,避免了缓慢的随机IO操作,改为性能较好的顺序IO操作,这是实现Kafka高吞吐量的一个重要手段
  1. Kafka需要定期删除消息以回收磁盘空间,可以通过日志片段(Log Segment)机制来实现
  • 在Kafka底层,一个日志又被细分成多个日志段,消息被追加到当前最新的日志段
  • 当写满一个日志段后,Kafka会自动切分出一个新的日志段,并将老的日志段封存起来
  • Kafka在后台有定时任务定期地检查这些老的日志段是否能够被删除,从而实现回收磁盘空间的目的

消费者

  1. 点对点模型(Peer to Peer,P2P):同一条消息只能被下游的一个消费者消费,其他消费者不能染指
  2. Kafka通过消费者组(Consumer Group)来实现P2P模型
  • 消费者组:多个消费者实例共同组成一个组来消费一组主题
  • 这组主题中的每个分区都只会被组内的一个消费者实例消费,其他消费者实例不能消费它
  • 消费者对分区有所有权
  1. 引入消费者组的目的:提高消费者端的吞吐量(TPS)
  2. 消费者实例(Consumer Instance):即可以是运行消费者应用的进,也可以是一个线程
  3. 重平衡(Rebalance)
  • 若组内的某个实例挂了,Kafka能够自动检测到,然后把这个挂掉的实例之前负责的分区转移给组内其他存活的消费者
  • 重平衡引发的消费者问题很多,目前很多重平衡的Bug社区都无力解决
  1. 消费者位移(Consumer Offset):记录消费者当前消费到了分区的哪个位置,随时变化
  • 分区位移:表征的是消息在分区内的位置,一旦消息被成功写入到一个分区上,消息的分区位移就固定

小结

  1. 消息(Record):消息是Kafka处理的主要对象
  2. 主题(Topic):主题是承载消息的逻辑容器,实际使用中多用来区分具体的业务
  3. 分区(Partition):一个有序不变的消息序列,每个主题下有多个分区
  4. 消息位移(Offset):也叫分区位移,表示一条消息在分区中的位置,是一个单调递增且不变的值
  5. 副本(Replica)
  • Kafka中同一条消息能够被拷贝到多个地方以提供数据冗余
  • 副本分为领导者副本和追随者副本,副本在分区的层级下,每个分区可配置多个副本实现高可用
  1. 生产者(Producer):向主题发布消息的应用程序
  2. 消费者(Consumer):从主题订阅消息的应用程序
  3. 消费者位移(Consumer Offset):表征消费者的消费进度,每个消费者都有自己的消费者位移
  4. 消费者组(Consumer Group):多个消费者实例共同组成一个组,同时消费多个分区以实现高吞吐
  5. 重平衡(Rebalance)
  • 消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅分区的过程
  • 重平衡是Kafka消费者端实现高可用的重要手段

写在最后

  • 第一:看完点赞,感谢您的认可;
  • ...
  • 第二:随手转发,分享知识,让更多人学习到;
  • ...
  • 第三:记得点关注,每天更新的!!!
  • ...

原文地址:https://blog.51cto.com/14409778/2416015

时间: 2024-10-10 10:34:18

Java程序员面试必备——kafka的专业术语的相关文章

Python/Java程序员面试必备常用问题解析与答案

转自AI算法联盟,理解python技术问题,以及一些常见的java面试中经常遇到的问题,这些面试问题分为四类: 是什么(what) 如何做(how) 说区别/谈优势(difference) 实践操作(practice) 1. 什么是Python? Python是一种编程语言,它有对象.模块.线程.异常处理和自动内存管理.可以加入与其他语言的对比.下面是回答这一问题的几个关键点: a. Python是一种解释型语言,python代码在运行之前不需要编译. b. Python是动态类型语言,在声明变

JAVA程序员面试总结,高手整理加强版

每个程序员.或者说每个工作者都应该有自己的职业规划,分享高手整理的java程序员面试总结给愿意思考自己未来的朋友们. 第一阶段:三年 我 认为三年对于程序员来说是第一个门槛,这个阶段将会淘汰掉一批不适合写代码的人.这一阶段,我们走出校园,迈入社会,成为一名程序员,正式从书本 上的内容迈向真正的企业级开发.我们知道如何团队协作.如何使用项目管理工具.项目版本如何控制.我们写的代码如何测试如何在线上运行等等,积累了一定的 开发经验,也对代码有了一定深入的认识,是一个比较纯粹的Coder的阶段. 第二

【软帝学院】七点java程序员进阶必备技能

程序员进阶很慢?七点java程序员进阶必备技能,让你少走弯路 一.架构师筑基必备技能 阿里面试更多的内容是架构师基础内容,比如并发编程的AQS.CAS等,多纬度提升架构基础,并发编程高级进阶,JVM性能深度调优,网络编程与高效IO,深入Tomcat底层,Mysql深度优化实战,架构师必备Linux 二.分布式方案及团队协作工具 分布式环境下应该知道的分布式系列问题: 分布式事物解决方案 单点登录解决方案 分布式任务调试解决方案 Maven企业级实战 Jenkins分布式构建实战 Git版本管理

《JAVA 程序员面试宝典(第四版)》读书笔记之前言

工作五年了一直在小的软件公司混,总感觉自己的专业知识没有太大的提升.当然了中间也换了一两家公司,面试的公司就很多家,总感觉正规的软件公司(无论大小)对于基础知识的考核都非常重视,而不管你说你之前服务过什么NB公司,做过什么样NB的项目,上来就先拿一份基础的题目来考核你看一下你的水平.一开始我是排斥的,总感觉考这些东西没有什么用,反正有的东西工作中不一定就用得到,只要自己能够做出东西来就可以了.问题来了怎么样子才算“做出东西”呢?这个问题总感觉很难从理论上来回答,就拿我这几年工作的事情来说吧,在这

Java程序员面试失败的5大原因

下面是Java程序员面试失败最有可能的5大原因,当然也许这5点原因适用于所有的程序员,所以,如果你是程序员,请认真阅读以下内容. #1 说得太少 尤其是那些开放式的问题,如“请介绍下你自己”或“请讲一下你曾经解决过的复杂问题”.面试官会通过你对这些技术和非技术问题的回答来评估你的激情.他们也会通过模拟团队氛围和与你的交流互动来判断你的经验和能力. 所以,仅仅只用两三句话来回答不但不能显示出你对这个专业的兴趣,还会让整个面试过程显得非常无聊.如果你不能很好地说明你的经验.成就和技能可以给企业带来的

java基础知识强化52:Java程序员面试失败的5大原因

下面是Java程序员面试失败最有可能的5大原因,当然也许这5点原因适用于所有的程序员,所以,如果你是程序员,请认真阅读以下内容. 1 说得太少 尤其是那些开放式的问题,如“请介绍下你自己”或“请讲一下你曾经解决过的复杂问题”.面试官会通过你对这些技术和非技术问题的回答来评估你的激情.他们也会通过模拟团队氛围和与你的交流互动来判断你的经验和能力. 所以,仅仅只用两三句话来回答不但不能显示出你对这个专业的兴趣,还会让整个面试过程显得非常无聊.如果你不能很好地说明你的经验.成就和技能可以给企业带来的价

两年Java程序员面试经验分享,从简历制作到面试总结!

前言 工作两年左右,实习一年左右,正式工作一年左右,其实挺尴尬的,高不成低不就.因此在面试许多公司,找到了目前最适合自己的公司之后.于是做一个关于面试的总结.希望能够给那些依旧在找工作的同学提供帮助. 面试 其实关于面试总结这块,我也看过不少文章,但是大部分都是关于面试题以及面试中的问题所谈.但是对于一个不擅长找工作的同学来说,其实在简历制作这一块很重要.因为简历没写好的话,连面试邀请都没,何谈面试呢.所以我准备谈谈我对简历制作这块的一些见解.如有不妥,欢迎指出! 简历制作 在写简历这方面,需要

金九银十,浅谈关于java程序员面试的一些事项

本篇博文针对的是应届毕业生以及工作两三年左右的java程序员. 为什么要跳槽? 这是一个很广义的问题,每个人心中都有一份答案. 例如: 公司的待遇不好, 薪资涨幅不符合预期要求, 厌倦了出差的荒无天日的繁重工作, 公司的妹子太少, 领导太傲娇, 同事之间关系太逼格, 某某同学跳槽到某某公司之后涨到了多少多少钱, 某某同学的朋友的同事的三姑妈家的大儿子的好基友在某某高就, 等等辞职理由. 咱们就不多说了,还是谈谈怎么应付面试吧. 以下内容是我在面试中总结的一些经验,希望这些可以给各位带来帮助和启迪

《Java程序员面试笔试宝典》之字符串创建与存储的机制是什么

在Java语言中,字符串起着非常重要的作用,字符串的声明与初始化主要有如下两种情况:(1) 对于String s1=new String("abc")语句与String s2=new String("abc")语句,存在两个引用对象s1.s2,两个内容相同的字符串对象"abc",它们在内存中的地址是不同的.只要用到new总会生成新的对象. (2) 对于String s1 = "abc"语句与String s2 = "