kafka-我与面霸的三百回合大战

这篇具有很好参考价值的文章主要介绍了kafka-我与面霸的三百回合大战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

:kakfa的段号其实就是根据偏移量来的,它代表当前段内偏移量最小的那条数据的offset,比如:

kafka-我与面霸的三百回合大战,程序员,kafka,分布式

segment1的段号是200,segment2的段号是500,那么segment1就存储了偏移量200-499的消息。

面试官:嗯嗯,那定位到段后,如何定位到具体的消息,直接遍历吗?

:不是直接遍历,直接遍历效率太低,kafka采用稀疏索引的方式来搜索具体的消息,其实每个log分段后,除了log文件外,还有两个索引文件,分别是.index和.timeindex,

kafka-我与面霸的三百回合大战,程序员,kafka,分布式

其中.index就是我说的偏移量索引文件,它不会为每条消息创建索引,它会每隔一个范围区间创建索引,所以称之为稀疏索引。kafka-我与面霸的三百回合大战,程序员,kafka,分布式 比如我们要查找消息6的时候,首先加载稀疏文件索引.index到内存中,然后通过二分法定位到消息5,最后通过消息5指向的物理地址接着向下顺序查找,直至找到消息6。

面试官:那稀疏索引的好处是什么?

:稀疏索引是一个折中的方案,既不占用太多空间,也提供了一定的快速检索能力。

面试官:上面你说到了.timeindex文件,它是干嘛的?

:这和kafka清理数据有着密切的关系,kafka默认保留7天内的数据,对于超过7天的数据,会被清理掉,这里的清理逻辑主要根据timeindex时间索引文件里最大的时间来判断的,如果最大时间与当前时间差值超过7天,那么对应的数据段就会被清理掉。

面试官:说到数据清理,除了你说的根据时间来判断的,还有哪些?

:还有根据日志文件大小和日志起始偏移量的方式,对于日志文件大小,如果log文件(所有的数据段总和)大于我们设定的阈值,那么就会从第一个数据段开始清理,直至满足条件。对于日志起始偏移量,如果日志段的起始偏移量小于等于我们设定的阈值,那么对应的数据段就会被清理掉。

面试官:你知道消息合并吗?如果知道说说消息合并带来的好处。

:了解一点,消息合并就是把多条消息合并在一起,然后一次rpc调用发给broker,这样的好处无疑会减少很多网络IO资源,其次消息会有个crc校验,如果不合并每条消息都要crc,合并之后,多条消息可以一起crc一次。

面试官:那合并之后的消息,什么时候会给broker?

:合并的消息会在缓冲区内,如果缓冲区快满了或者一段时间内没有生产消息了,那么就会把消息发给broker。

面试官:那你知道消息压缩吗?

:知道一点,压缩是利用cpu时间来节省带宽成本,压缩可以使数据包的体积变得更小,生产者负责将数据消息压缩,消费者拿到消息后自行解压。

面试官:所有只有生产者可以压缩?

:不是的,broker也可以压缩,当生产者指定的压缩算法和broker指定压缩算法的不一样的时候,broker会先按照生产者的压缩算法解压缩一下,然后再按照自己的压缩算法压缩一下,这是需要注意的,如果出现这种情况会影响整体的吞吐。还有就是新老版本的问题,如果新老版本的压缩算法不兼容,比如broker版本比较老,不支持新的压缩算法,那么也会发生一样的事情。

面试官:我们知道kafka的消息是要写入磁盘的,磁盘IO会不会很慢?

:是这样的,kafka的消息是磁盘顺序读写的,有关测试结果表明,一个由6块7200r/min的RAID-5阵列组成的磁盘簇的线性(顺序)写入速度可以达到 600MB/s,而随机写入速度只有 100KB/s,两者性能相差6000倍。操作系统可以针对线性读写做深层次的优化,比如预读(read-ahead,提前将一个比较大的磁盘块读入内存)和后写(write-behind,将很多小的逻辑写操作合并起来组成一个大的物理写操作)技术。顺序写盘的速度不仅比随机写盘的速度快,而且也比随机写内存的速度快。

面试官:顺序读写是为了解决了缓慢的磁盘问题,那在网络方面还有其他的优化吗?

:有,零拷贝,在没有零拷贝的时候,消息是这样交互的:

kafka-我与面霸的三百回合大战,程序员,kafka,分布式

  1. 切到内核态:内核把磁盘数据copy到内核缓冲区

  2. 切到用户态:把内核的数据copy到用户程序

  3. 切到内核态:用户数据copy到内核socket缓冲区

  4. socket把数据copy给网卡

可以发现一份数据经过多次copy,最终兜兜转转又回到了内核态,实属浪费。

当有了零拷贝之后:kafka-我与面霸的三百回合大战,程序员,kafka,分布式

  1. 磁盘数据copy到内核缓冲

  2. 内核缓冲把描述符和长度发给socket,同时直接把数据发给网卡

可以发现通过零拷贝,减少了两次copy过程,大大降低了开销。

可靠篇


面试官:(关于性能方面的问的差不多了,接下来换换口味吧),kafka的多消费者模型是怎么做到的?

:如果要支持多个消费者同时消费一个topic,最简单的方式就是把topic复制一份,但这无疑会浪费很多空间,尤其在消费者很多的情况下,

kafka-我与面霸的三百回合大战,程序员,kafka,分布式

于是kafka设计出一套offset机制,即一份数据,不同的消费者根据位置来获取不同的消息即可。

kafka-我与面霸的三百回合大战,程序员,kafka,分布式

面试官:那你知道消费者的offset存在哪吗?

:很久以前,是存在zookeeper中的,但是offset需要频繁更新,zookeeper又不适合频繁更新,所以后来就把消费者位移存在了一个叫_consumer_offset的topic中,这个topic会在第一个消费者启动的时候自动创建,默认50个分区,3个副本。

面试官:那你说说这个_consumer_offset里面具体存了什么?

:这里其实主要分为key和value,value可以简单的认为就是我们的消费者位移,关于key,这里要细说下,由于每个消费者都属于一个消费者组,并且每个消费者其实消费的是某个topic的分区,所以通过group-topic-partition就可以关联上对应的消费者了,这也就是key的组成。

面试官:那你能介绍下消费者提交位移的方式吗?

:这里分为自动提交和手动提交。自动提交的话,就不需要我们干预,我们消费完消息后,kafka会自动帮我们提交,手动提交的话,就需要我们在消费到消息后自己主动commit。
先自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

kafka-我与面霸的三百回合大战,程序员,kafka,分布式

kafka-我与面霸的三百回合大战,程序员,kafka,分布式

kafka-我与面霸的三百回合大战,程序员,kafka,分布式

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以扫码领取!

kafka-我与面霸的三百回合大战,程序员,kafka,分布式

总结:绘上一张Kakfa架构思维大纲脑图(xmind)

kafka-我与面霸的三百回合大战,程序员,kafka,分布式

其实关于Kafka,能问的问题实在是太多了,扒了几天,最终筛选出44问:基础篇17问、进阶篇15问、高级篇12问,个个直戳痛点,不知道如果你不着急看答案,又能答出几个呢?

若是对Kafka的知识还回忆不起来,不妨先看我手绘的知识总结脑图(xmind不能上传,文章里用的是图片版)进行整体架构的梳理

梳理了知识,刷完了面试,如若你还想进一步的深入学习解读kafka以及源码,那么接下来的这份《手写“kafka”》将会是个不错的选择。

  • Kafka入门

  • 为什么选择Kafka

  • Kafka的安装、管理和配置

  • Kafka的集群

  • 第一个Kafka程序

  • Kafka的生产者

  • Kafka的消费者

  • 深入理解Kafka

  • 可靠的数据传递

  • Spring和Kafka的整合

  • SpringBoot和Kafka的整合

  • Kafka实战之削峰填谷

  • 数据管道和流式处理(了解即可)

kafka-我与面霸的三百回合大战,程序员,kafka,分布式

kafka-我与面霸的三百回合大战,程序员,kafka,分布式

  • Spring和Kafka的整合

  • SpringBoot和Kafka的整合

  • Kafka实战之削峰填谷

  • 数据管道和流式处理(了解即可)

[外链图片转存中…(img-fc7PmESI-1711394650199)]

[外链图片转存中…(img-JQal4QVd-1711394650200)]

需要更多Java资料的小伙伴可以帮忙点赞+关注,点击传送门,即可免费领取!文章来源地址https://www.toymoban.com/news/detail-851474.html

到了这里,关于kafka-我与面霸的三百回合大战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kafka发送数据的三种模式

    在kafka-0.8.2之后,producer不再区分同步(sync)和异步方式(async),所有的请求以异步方式发送,这样提升了客户端效率。 本文分享自华为云社区《kafka消息发送模式》,作者:dayu_dls。 在kafka-0.8.2之后,producer不再区分同步(sync)和异步方式(async),所有的请求以异步方式发送,这样提

    2024年02月15日
    浏览(31)
  • kafka删除topic消息的三种方式

    kafka删除topic消息的三种方式 方法一:快速配置删除法(确保topic数据不要了) 1.kafka启动之前,在server.properties配置delete.topic.enable=true 2.执行命令bin/kafka-topics.sh --delete --topic test --zookeeper zk:2181或者使用kafka-manager集群管理工具删除 注意:如果kafka启动之前没有配置delete.topic.e

    2024年02月16日
    浏览(39)
  • 第三百五十三回

    我们在上一章回中介绍了\\\"分享一些好的Flutter站点\\\"相关的内容,本章回中将介绍timezone包.闲话休提,让我们一起Talk Flutter吧。 我们在前面章回中介绍了获取当前时区的内容,本章回将介绍一个与时区相关的包,它虽然不能获取到当前时区,但是可以查看所有的时区,而且可以

    2024年02月20日
    浏览(49)
  • 国内某公司邮箱被黑,损失三百多万

    桂林一家公司邮箱遭黑客入侵,导致56万美金(387万人民币)转入骗子账户。 3月14日,桂林临桂区某公司报警称本公司财务S先生通过公司企业邮箱向美国总部发邮件申请一笔56万美金的合作款,后公司邮箱遭黑客入侵,被黑客更改了邮件内容,把收款账户改为一个香港中信银

    2024年02月03日
    浏览(33)
  • JAVA面试题分享三百二十:ES超详细讲解

    目录 生活中的数据 先说说 Lucene 核心概念 集群(Cluster) 发现机制 节点的角色 脑裂现象 分片(Shards) 副本(Replicas) 映射(Mapping) 基本使用 安装使用 集群健康状态 机制原理 写索引原理 存储原理 分段存储 延迟写策略 段合并 性能优化 存储设备 内部索引优化 调整配置参

    2024年01月24日
    浏览(41)
  • JAVA面试题分享三百零二十:ES超详细讲解

    目录 生活中的数据 先说说 Lucene 核心概念 集群(Cluster) 发现机制 节点的角色 脑裂现象 分片(Shards) 副本(Replicas) 映射(Mapping) 基本使用 安装使用 集群健康状态 机制原理 写索引原理 存储原理 分段存储 延迟写策略 段合并 性能优化 存储设备 内部索引优化 调整配置参

    2024年02月03日
    浏览(44)
  • Unity 回合制战斗

             回合制战斗游戏是一种流行的游戏类型,它的基本玩法是让玩家控制角色在回合制系统下进行战斗。本文将介绍如何使用Unity引擎实现一个基于回合制系统的3D战斗游戏,并提供完整的代码和注释。 游戏设计          我们的回合制战斗游戏将包括一个主菜单场

    2024年02月16日
    浏览(42)
  • 强化学习专题:回合更新算法

    游戏开始 玩家收到两张明牌,荷官发给自己一张明牌和一张暗牌 根据自己手中的牌和荷官的明牌,玩家需要决定是否要牌(Hit)或停牌(Stand) 选择要牌,荷官发一张额外的牌 如果玩家的牌总点数超过21点,即爆牌(Bust),该玩家输。 否则可以继续要牌直到停止 选择停牌

    2024年02月11日
    浏览(41)
  • UE4 回合游戏项目 01- 创建人物-玩家角色

    步骤: 1.下载游戏资源,链接:https://pan.baidu.com/s/1l2hpeEtIoFcUC4vAhut-ig 提取码:wlcp 2.解压第一节课资源 双击打开项目:  3.新建一个空白工程  设置好项目的存储路径和项目名  4.打开含有游戏资源的虚幻编辑器,右键点击内容,选择迁移  将所有的游戏资源迁移到新项目中

    2024年02月08日
    浏览(63)
  • UNITY3D回合制游戏开发教程案例

    UNITY3D实现回合制游戏 ,类似梦幻西游,口袋妖怪,阴阳师。 先上效果 UNITY3D 回合制游戏案例源码开发教程 普通攻击 AOE技能 游戏概述 回合制游戏是一种策略游戏,玩家需要在自己的回合内进行决策,然后等待对手的回合。游戏通常包括角色扮演、卡牌、战略等元素,玩家需

    2024年02月09日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包