当前位置: 首页 > news >正文

【面试】Kafka基础知识

定义

Kafka是一个分布式基于发布/订阅模式的消息队列

优点

  • 解耦:上下游之间依赖解耦。
  • 缓冲/削峰:生产消息的速度和消费消息的速度不一致时,可以起到缓冲作用。
  • 异步:天然的异步处理机制,生产者把消息(任务)放进队列,消费者把消息(任务)从队列中拿出。

关键名词

  • 生产者(Producer):消息生产者,负责给Kafka Broker发消息。
  • 消费者(Consumer):消息消费者,负责从Kafka Broker中取消息。
  • 消费者组(Consumer Group, CG):消费者组,由多个消费者组成。
  • 代理者(Broker):Kafka集群中的服务器。
  • 主题(Topic):生产者和消费者面向的队列。
  • 分区(Partition):Topic分布在多个Broker中,Topic分为多个Partition,每个Partition自己是有序的队列。
  • 消息位移(Consumer Offset):代表消费者当前消费的进度,每个消费者会维护自己的消费者唯一。
  • 副本(Replica):
    • 提高可靠性和容错能力:Kafka副本可以提高数据的可靠性和容错能力。如果某个Broker宕机,Leader副本失效,此时Follower副本会自动切换为Leader副本,确保数据的可靠性和服务的可用性。
    • 提高读取性能:Kafka读取速度非常快,部分原因是因为副本机制的支持。读取请求可以被分发到多个副本中,从而提高读取性能。
    • 提高吞吐量:Kafka可以在多个Broker之间进行数据分片,支持并行处理,从而提高吞吐量。同时,副本机制也支持并行处理,提高了吞吐量。
    • 支持数据的备份和恢复:Kafka副本机制可以支持数据备份和恢复。
  • 重平衡(Rebalance):当消费者组增加或者减少消费者的时候,其他消费者实例重新分配订阅主题分区的过程,Rebalance也是Kafka确保高可用的手段之一。

核心API

  • 生产者API:面向生产者的API,简单理解为生产者通过调用该API方法发送(发布)消息
  • 消费者API:面向消费者的API,简单理解为消费者通过调用该API方法获取(订阅)消息
  • Streams API:在一下流处理场景可以使用的API
  • Connector API:

应用场景

  • 上下游数据同步
  • 日志收集

常见面试问题

Kafka是如何保证每个消费者不多消费也不少消费?

Kafka 使用的是一种叫做 "分区 rebalance" 的机制来保证每个消费者不会多消费或少消费。具体来说,每个 Kafka 主题都会分为多个不同的分区,每个消费者在加入组时会被分配到一个或多个分区。当消费者加入组时,Kafka 会为每个消费者分配一定数量的分区。如果一个消费者失败或离开组,Kafka 会重新分配其分区给其他消费者。这就是所谓的 "分区 Rebalance",可以保证每个消费者都只消费自己被分配的分区。此外,Kafka 还会跟踪每个消费者消费的偏移量,以确保每个消费者都从正确的位置开始读取消息。这可以通过 Kafka 的消费者组协议来实现,例如,基于偏移量提交和跟踪来确保每个消费者消费正确的偏移量。

可参考知乎:Kafka如何保证不丢失不重复消费 - 知乎

Kafka实现高可用的方法?

  1. 分布式:Kafka集群是由多个Broker组成的,通常这些Broker会分布在不同的机器上。这种分散布置的好处是当集群中的某台机器出现故障时,其他机器上的Broker仍然能够提供服务,确保了系统的高可用性。
  2. 备份机制:其实思路很简单,就是将相同的数据拷贝到多台机子上,副本分为Leader Replica(主副本)和Follower Replica(从副本),Leader Replica对外提供服务,Follower Replica追随Leader Replica,并不对外提供服务。生产者向Leader Replica写消息,消费者从Leader Replica读消息,而Follower Replica主动向Leader Replica发请求让Leader Replica将最新的数据发送给他,Follower Replica接收到后进行持久化,Follower Replica唯一需要做的就是与Leader Replica保持同步,当Leader Replica数据出现问题时,Follower Replica可以顶上。
  3. 重平衡:当消费者组增加或者减少消费者的时候,其他消费者实例重新分配订阅主题分区的过程。

Kafka Broker是如何持久化数据的?

Kafka使用消息日志(Log)来存储数据,并且通过日志段机制(Log Segment)将日志细分成多个日志段,新的消息会被追加到最新的日志段中,如果当前日志段写满,则会自动切分初一个新的日志段,并且将辽的日志段保存。Kafka还有定时任务定期定理老的日志段。

相关文章:

【面试】Kafka基础知识

定义 Kafka是一个分布式基于发布/订阅模式的消息队列 优点 解耦:上下游之间依赖解耦。缓冲/削峰:生产消息的速度和消费消息的速度不一致时,可以起到缓冲作用。异步:天然的异步处理机制,生产者把消息(任务)放进队列&…...

【入门Flink】- 06Flink作业提交流程【待完善】

Standalone 会话模式作业提交流程 代码生成任务的过程: 逻辑流图(StreamGraph)→ 作业图(JobGraph)→ 执行图(ExecutionGraph)→物理图(Physical Graph)。 作业图算子链…...

Linux 上的轻量级浏览器

导读大多数 Linux 桌面环境中包含的基本图像查看器可能不足以满足你的需要。如果你想要一些更多的功能,但仍然希望它是轻量级的,那么看看这四个 Linux 桌面中的图像查看器,如果还不能满足你的需要,还有额外的选择。 当你需要的不…...

肆[4],滤波

1,简介 1.1,Opencv提供滤波处理函数 方框滤波,BoxBlur函数 均值滤波(领域平均滤波),Blur函数 高斯滤波,GaussianBlur函数 中值滤波,medianBlur函数 双边滤波,bilateralFilter函数 1.2&…...

Python 包管理器入门指南

什么是 PIP? PIP 是 Python 包管理器,用于管理 Python 包或模块。注意:如果您的 Python 版本是 3.4 或更高,PIP 已经默认安装了。 什么是包? 一个包包含了一个模块所需的所有文件。模块是您可以包含在项目中的 Pyth…...

2022年06月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 如下所示的2行代码,最后print()函数打印出来的结果是?( ) c [[赵大,…...

配置Raspberry自动连接WIFI,在无法查看路由器的校园网情况下使用自己电脑热点

1、开启电脑热点,并共享电脑WLAN2 打开控制面板->网络和Internet->网络连接 选择自己的校园网,我这里是WLAN2,右键属性,如下操作: 如果没有看到 本地连接*10类似的图标 则按如下操作:winx键&#x…...

#stm32整理(一)flash读写

以这篇未开始我将进行stm32学习整理为期一个月左右完成stm32知识学习整理内容顺序没有一定之规写到哪想到哪想到哪写到哪,主要是扫除自己知识上的盲区完成一些基本外设操作。 以stm32f07为例子进行flash读写操作 stm32flash简介 参考资料正点原子和野火开发手册 …...

windows10编译高版本openssl

参考文章 参考文章中的windows编译为低版本,在高版本的openssl编译中已经没有:“ms\do_ms.bat”这个脚本了,现记录下编译过程 1、准备工作 安装ActivePerl,安装后会自动写入环境变量,参照参考文章测试安装成功与否&a…...

Mac之NVM|通过brew安装、更新、卸载、重新安装nvm

文章目录 导文通过brew安装NVM通过brew更新NVM通过brew卸载NVM通过brew重新安装NVM 导文 Mac之NVM 通过brew安装、更新、卸载、重新安装 通过brew安装NVM brew install nvm通过brew更新NVM brew upgrade nvm通过brew卸载NVM brew uninstall nvm通过brew重新安装NVM brew re…...

react的状态管理有哪些方法?

在React中,有多种方法可以进行状态管理,以下是其中一些常见的方法: 1:使用React的内置状态(State): React组件可以通过使用 useState 钩子来管理内部的状态。它允许你在函数组件中定义和更新状态。例如: import React, { useState } from react;function MyComponent…...

AST注入-从原型链污染到RCE

文章目录 概念漏洞Handlebarspug 例题 [湖湘杯 2021 final]vote 概念 什么是AST注入 在NodeJS中,AST经常被在JS中使用,作为template engines(引擎模版)和typescript等。对于引擎模版,结构如下图所示。 如果在JS应用中存在原型污染漏洞&…...

【开题报告】基于uniapp的在线考试小程序的设计与实现

1.研究背景 随着社会的发展和科技的进步,网络技术被广泛应用于教育领域。在线教育已成为当今发展趋势之一,其中在线考试更是具有重要的意义。传统的考试方式不仅耗费大量人力物力,而且存在考试成果的保密问题。而在线考试可以使考试过程更加…...

使用pdf2image pdf转图片

安装poppler https://wenku.csdn.net/answer/1zxh8ckp6i from pdf2image import convert_from_path, convert_from_bytes import os# https://github.com/Belval/pdf2imageoutput_folder ./ dpi_value 600 pdf_start_page 1 # pdf显示的第一页 start_page 237 # 真实页码 p…...

非关系型数据库Redis的安装【Linux】及常用命令

前言 Redis(Remote Dictionary Server)是一种开源的内存数据库管理系统,它以键值存储方式来存储数据,并且支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。Redis最初由Salvatore Sanfilippo开发&#xff0c…...

【React】02.create-react-app基础操作

文章目录 当前以及未来的开发,一定是:组件化开发如何划分组件React的工程化/组件化开发create-react-app基础运用运用react常用版本一个React项目中,默认会安装 2023年最新珠峰React全家桶【react基础-进阶-项目-源码-淘系-面试题】 当前以及…...

gcc -static 在centos stream8 和centos stream9中运行报错的解决办法

gcc -static 在centos stream8 和centos stream9中运行报错的解决办法: 报/usr/bin/ld: cannot find -lc 我们下载glibc-static: 选择x86_64的。 还有一个是libxcrypt-static,依旧在这个网站里搜。 rpm -ivh glibc-static-2.28-239.el8.x…...

【UE5 Cesium】actor随着视角远近来变化其本身大小

效果 步骤 1. 首先我将“DynamicPawn”设置为默认的pawn类 2. 新建一个父类为actor的蓝图,添加一个静态网格体组件 当事件开始运行后添加一个定时器,委托给一个自定义事件,每2s执行一次,该事件每2s获取一下“DynamicPawn”和acto…...

vue-render函数的三个参数

第一个参数(必须) - {String | Object | Function} Vue.component(elem, {render: function(createElement) {return createElement(div);//一个HTML标签字符/*return createElement({template: <div></div>//组件选项对象});*//*var func function() {return {t…...

数据结构与算法(Java版) | 排序算法的介绍与分类

各位朋友&#xff0c;现在我们即将要进入数据结构与算法&#xff08;Java版&#xff09;这一系列教程中的排序算法这一章节内容的学习中了&#xff0c;所以还请大家系好安全带&#xff0c;跟随我准备出发吧&#xff01; 相信诸位应该都知道排序算法有很多种吧&#xff01;就算没…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...

FFmpeg avformat_open_input函数分析

函数内部的总体流程如下&#xff1a; avformat_open_input 精简后的代码如下&#xff1a; int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...

GAN模式奔溃的探讨论文综述(一)

简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...