问你为什么选择Kafka,你会怎么回答?

news2024/11/22 14:11:27

可靠的含义在百度百科的解释是:可以信赖、可以相信、可靠的朋友。那Kafka究竟是不是一个可靠的朋友呢?既然全世界绝大部分高可用系统都有Kafka的支持,Kafka必定有其过人之处,跟着我来分析分析。

另外多提一嘴Kafka在GitHub目前已有star数27.6k、fork数13.6k。

在可靠的人手中,有强人在关照

在可靠的人手中,有强人在关照

本文收录在我开源的《Java学习面试指南》中,一份覆盖Java程序员所需掌握的Java核心知识、面试重点。希望收到大家的 ⭐ Star ⭐支持。GitHub地址:https://github.com/hdgaadd/JavaGetOffer,相信你看了一定不会后悔。

文章目录

    • 1. Kafka高水位
    • 2. Kafka消息可靠性
      • 2.1 消息存储可靠性
      • 2.2 生产者消费者可靠性
      • 2.3 消费堆积问题
    • 3. Kafka控制器

1. Kafka高水位

面试官:知道Kafka高水位吗?

我们都知道Kafka消息保存在首领分区和分区副本中,Kafka要保证即使从分区副本读取消息也只会读取已提交的消息。Kafka的高水位就是为了这个目标而开发出来的。

如果大家对消息已提交的概念不清楚的话,可以看下以下的解释。

Kafka的消息只有在所有分区副本都同步该消息后,才算是已提交的消息

在分区复制的过程中,首领分区会在发送的数据里加入当前高水位。当前高水位就是复制偏移量,记录了当前已提交消息的最大偏移量。而分区副本就可以根据首领分区副本提供的高水位,来避免未提交的消息被消费者消费。

就如下图,最大偏移量的限制就像海面上的水位。

在这里插入图片描述

2. Kafka消息可靠性

2.1 消息存储可靠性

面试官:你说说Kafka是怎么保证消息可靠性的?

大家在回答面试官问题前可以思考下,可靠性的含义是什么?

在业务系统中,消息的不丢失是最重要的,数据即是金钱。如果把客户的一条支付消息丢失,而这条支付信息的涉及的金额不菲,想想对公司的损失有多大。所以可靠性意味着对消息的存储和保护。

Kafka在这方面采用了复制机制和分区多副本架构来作为消息可靠性的核心。

(1)分区多副本架构。

Kafka的所有主题被分为了多个分区存储在多个Broker里,而每个分区可以有多个副本。例如有4个Broker节点,Broker1存储了分区首领副本,而Broker2、Broker3可以存储其分区副本。

Kafka对消息的存储有多个分区副本来支持,可以避免单点问题导致数据丢失找不回来的情况。

(2)复制机制。

在通常情况下消费者都是从首领副本里读取消息,同时会有n(复制系数)个Broker机器会去同步复制首领副本后,生成跟随者副本也就是分区副本。

如果首领副本的机器挂了,分区副本就会选举成为新的首领副本

复制机制保证了分区副本和首领副本的数据一致性,有复制机制的加持,分区多副本架构才是可用的。

2.2 生产者消费者可靠性

面试官:还有呢?

上面所说的其实是基于Broker层面带给Kafka的可靠性保障,我们还需要在生产者、消费者层面下功夫,来使整个系统减少丢失数据的风险。

一、在生产者方面。

Kafka提供了多种发送确认模式,我们可以根据业务的可靠性需求配置合适的acks。

  1. ack = 0。如果消息生产者能够把消息通过网络发送出去,则认为消息已成功写入。
  2. ack = 1。如果首领分区收到消息并成功写入,生产者收到确认返回,则认为消息已成功写入。
  3. ack = all。只有在消息成功写入所有分区副本后,才认为消息已成功写入。这保证了消息的多备份。

以上的各种acks情况如果失败的话,我们可以让生产者继续重试发送消息,直到Kafka返回成功。

二、在消费者方面

大家如果能回答上文第一个面试官问题:知道Kafka高水位吗,就知道Kafka高水位保证了消费者只会读取到已提交的数据,即被写入所有分区副本的数据。所以消费者要确保的是跟踪哪些数据已读取了、哪些数据未读取。

  1. 消费者消费消息时会先获取一批消息,同时从最后一个偏移量开始读取,这保证了消息的顺序性
  2. 消费者消费消息后会同步提交、异步提交偏移量,保证了消息不被其他消费者重复消费

2.3 消费堆积问题

面试官:那要是Kafka消费堆积了你怎么处理?

这个问题是面试官常考的一个问题,我们要从Broker和消费者两方面来看。

一、Broker的话。

  1. 每个topic是分为多个分区给不同Broker进行处理,要合理分配分区数量来提高Broker的消息处理能力。比如3个Broker2个分区,可以改为3个Broker3个分区。
  2. 可以横向扩展Broker集群,来提高Broker的消息处理能力。

二、消费者的话。

  1. 可以增加消费者服务数量来提高消息消费能力。
  2. 在提交偏移量时,可以把同步提交改为异步提交。异步提交无需等待Kafka的确认返回,减少了同步等待Broker的时间。

3. Kafka控制器

面试官:知道Kafka控制器吧?

Kafka控制器其实也是一个Broker,不过它还负责选举分区首领。Kafka的控制器和Redis集群的哨兵的选举功能是一样的。

也就是在首领副本所在的分区失效后,Kafka会通过控制器来在分区副本里选举出新的首领副本

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTTP-一

一、超文本传输 1. 文本传输 > 字符串(能在utf8/gbk等码表上找到合法字符) 2. 超文本传输 > 不仅仅是字符串,还可以携带一些图片,特殊得格式 HTML 3. 富文本 word http0.9 -> http1.0 -> http1.1 -> http2.0 -> http3.0 http1.0是主流版本 2.0 和…

任务3.7 开发名片管理系统

本实战项目以Java语言为基础,精心打造了一个功能全面的名片管理系统。系统采用面向对象的设计原则,通过Card类来封装每张名片的详细信息,如姓名、单位、职位和联系电话等,并提供了标准的访问器和修改器方法以确保数据的安全访问。…

course-nlp——8-translation-transformer

本文参考自https://github.com/fastai/course-nlp。 注意力机制和 Transformer Nvidia AI 研究员 Chip Huyen 写了一篇很棒的文章《Top 8 trends from ICLR 2019》,其中的趋势之一是 RNN 正在失去研究人员的青睐。 这是有原因的,RNN 可能很麻烦&#…

2938. 区分黑球与白球

题目 桌子上有 n 个球,每个球的颜色不是黑色,就是白色。 给你一个长度为 n 、下标从 0 开始的二进制字符串 s,其中 1 和 0 分别代表黑色和白色的球。 在每一步中,你可以选择两个相邻的球并交换它们。 返回「将所有黑色球都移到…

网工内推 | 网络运维工程师,H3CIE认证优先,13薪,享股票期权

01 畅读 🔷招聘岗位:高级网络运维工程师 🔷职责描述: 1.负责线上业务网络技术运维工作,保障并优化线上网络质量; 2.规划并构建公司线上业务网络架构; 3.规划线上业务网络质量评估与监控体系&…

信号:干扰类别及特征提取

目录 第一部分:干扰类别 1.压制干扰 1.1噪声调幅瞄准式干扰(单音干扰) 1.2噪声调频阻塞式干扰(宽带噪声干扰) 1.3噪声调频扫频式干扰(线性调频) 2.欺骗干扰 2.1距离欺骗干扰(幅度调制干扰&#xff0…

关于main函数参数列表的那些事

写在最前面: 本篇博客所写代码,全部都依赖于Linux环境。 在开始之前,我们先问自己几个问题: main函数可以传参吗?如果main函数可以传参,最多可以传几个参数。main函数传递的参数具体作用是什么? 一.是否…

java小游戏-坦克大战1.0

文章目录 游戏界面样式游戏需求分析设计类过程1:初始化界面过程2:用面向对象思想设置功能过程3:调用类实例化对象过程4:联合调试 项目代码下载: CSDN_java小游戏-坦克大战1.0 来源:该游戏来自尚学堂~&…

神了,Suno创作的《不期待》三个版本,你最喜欢哪一个?

Suno AI 最近尝试了下 Suno AI 的v3.5模型,有点惊艳 做了三首版本的AI歌曲,词是我写的,其他全都交给Suno了,欢迎大家来听听 B站链接 Youtube链接

源码文章上传无忧,论坛小程序支持

前言 在数字化时代,知识的分享与传播显得愈发重要。为了满足广大创作者和求知者的需求,我们推出了全新的论坛小程序,不仅支持文章、源码、链接等多样化内容的上传,还实现了付费观看功能,为创作者们提供了一个展示才华…

flask 之JWT认证实现

目录 1、JWT 1.1、JWT概述 1.2、token的生成 1.3、token校验 1.4、flask项目中实现JWT认证 1、JWT 1.1、JWT概述 JWT(JSON Web Token)是一种用于身份验证和授权的开放标准。它由三部分组成,分别是头部、负载和签名。 头部&#xff0…

第三方软件测试机构与CMA、CNAS资质

第三方软件测试机构 随着信息技术的快速发展,软件在各个领域的应用越来越广泛,软件的质量和安全性成为人们关注的焦点。为了确保软件的质量和安全性,第三方软件测试机构和CMA、CNAS资质成为了重要的保障。 第三方软件测试机构是独立于软件开…

python调用excel的demo

在本地安装Pycharm之后,新建工程,在main.py中键入如下代码,即可实现Python调用excel: import pandas as pd sheet pd.read_excel(test.xlsx) data sheet.loc[0].values print("读取指定行的数据:\n{0}".format(data)) 第一次编…

如何将 MySQL 数据库共享给他人?

文章目录 共享所有数据库给他人1. 连接到 MySQL 数据库2. 选择要使用的数据库3. 修改连接所需的 host4. 刷新权限 共享部分数据库给他人1. 创建用户2. 授权3. 刷新权限 结语 🎉欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨~我是I…

JVMの静、动态绑定异常捕获JIT即时编译

在说明静态绑定和动态绑定之前,我们首先要了解在字节码指令的层面,JVM是如何调用方法的: 例如我有以下的代码,很简单就是在main方法中调用了另一个静态方法: public class MethodTest {public static void main(Strin…

git clone 文件名中文、有冒号等问题 fatal: repository ‘***/r/鏍″洯鏅烘収椋熷爞/.git/‘ not found

记录一个git问题,比较有意思,也比较难找。 背景 首先把代码拉下来,发现给我报错。 怀疑 刚开始以为是仓库地址变了,但是发现仓库地址并没有变过。 交流 然后寻找解决方案。因为同事也遇到过,同事交了我一招&…

数据结构第三篇【链表的相关知识点一及在线OJ习题】

数据结构第三篇【链表的相关知识点一及在线OJ习题】 链表链表的实现链表OJ习题顺序表和链表的区别和联系 本文章主要讲解关于链表的相关知识,喜欢的可以三连喔 😀😃😄😄😊😊🙃&#…

【iOS】——Runtime学习

文章目录 一、Runtime介绍二、Runtime消息传递三、实例对象、类对象、元类对象四、isa_t结构体的具体实现五、cache_t的具体实现六、class_data_bits_t的具体实现七、Runtime消息转发动态方法解析备用接收者完整消息转发 一、Runtime介绍 iOS的Runtime,通常称为Obj…

GitHub飙升!京东认证的“Python编程入门三剑客”究竟好在哪?

Python凭借着简单易学、功能强大,已经跃居TIOB编程语言榜首,并且已经开始了它的霸榜之旅。如何选择一套适合自己的Python学习教程,是每个Python爱好者面临的首要问题。 今天给小伙伴们带来的是图灵&京东认证的“Python编程入门三剑客”&…

项目:仿RabbitMQ实现的消息队列组件

文章目录 写在前面开源仓库和项目上线其他文档说明 需求分析BrokerServer交换机类型持久化消息应答 模块划分服务端模块客户端模块交换机数据管理模块队列数据管理模块绑定数据管理模块消息数据管理模块队列信息管理模块虚拟机数据管理模块路由匹配模块消费者管理模块信道管理模…