kafka面试题解答(四)

5、消费者组和分区数之间的关系是怎样的?

消费者组数小于等于分区数,消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费。

6、kafka如何知道哪个消费者消费哪个分区?

生产者把数据发送给各个分区,每个broker节点都有一个coordinator(协调器),消费者组对分区进行消费,到底哪个消费者消费哪个分区呢?首先groupId对50取模,看最后的结果是哪个分区节点,假如是1分区,那么1分区的协调器就是本次消费者组的老大,消费者纷纷向该协调器进行注册,协调器从中随机选择一个消费者作为本次消费的Leader,然后把本次消费的具体情况发送给Leader,让其制定一个消费计划(就是哪个消费者消费哪个分区),然后Leader发送给协调器,协调器再进行群发,将计划公布,各个消费者按照这个计划进行消费。

7、kafka消费者的消费分区策略有哪些,默认是个?

Kafka有四种主流的分区分配策略: Range、RoundRobin(轮询)、Sticky(粘性)、CooperativeSticky(配合的粘性)。

1.Range分区策略原理:

Kafka 默认的分区分配策略就是 Range + CooperativeSticky,所以不需要修改策略。

默认是Range,但是在经过一次升级之后,会自动变为CooperativeSticky。这个是官方给出的解释。默认的分配器是[RangeAssignor, CooperativeStickyAssignor],默认情况下将使用RangeAssignor,但允许通过一次滚动反弹升级到CooperativeStickyAssignor,该滚动反弹会将RangeAssignor从列表中删除。会出现数据倾斜,当每个topic中的consumer都多被分配一个的时候topic越大数据倾斜就越严重。

2)Range 分区分配再平衡策略

说明:某个消费者挂掉后,消费者组需要按照超时时间 45s 来判断它是否退出,所以需

要等待,时间到了 45s 后,判断它真的退出就会把任务分配给其他 broker 执行。

2.RoundRobin轮询分区策略以及再平衡

原理:

2)RoundRobin 分区分配再平衡案例

某个消费者挂掉后,消费者组需要按照超时时间 45s 来判断它是否退出,所以需要等待,时间到了 45s 后,判断它真的退出就会把任务分配给其他 broker 执行。

3.Sticky 以及再平衡

粘性分区定义:可以理解为分配的结果带有“粘性的”。即在执行一次新的分配之前, 考虑上一次分配的结果,尽量少的调整分配的变动,可以节省大量的开销。 粘性分区是 Kafka 从 0.11.x 版本开始引入这种分配策略,首先会尽量均衡的放置分区 到消费者上面,在出现同一消费者组内消费者出现问题的时候,会尽量保持原有分配的分区不变化。

Sticky 分区分配再平衡

某个消费者挂掉后,消费者组需要按照超时时间 45s 来判断它是否退出,所以需要等待,时间到了 45s 后,判断它真的退出就会把任务分配给其他 broker 执行。

4.CooperativeSticky 的解释【新的kafka中刚添加的策略】

在消费过程中,会根据消费的偏移量情况进行重新再平衡,也就是粘性分区,运行过程中还会根据消费的实际情况重新分配消费者,直到平衡为止。

好处是:负载均衡,不好的地方是:多次平衡浪费性能。

动态平衡,在消费过程中,实施再平衡,而不是定下来,等某个消费者退出再平衡。

8.kafka中的消费者,他们的偏移量存储在哪里?

从0.9版本开始,consumer默认将offset保存在Kafka一个内置的topic中,该topic为__consumer_offsets 【topic 其实就是数据,就是位置 topic -log --segment- 一个个文件】

Kafka0.9版本之前,consumer默认将offset 保存在Zookeeper中。

kafka0.11 版本 高于 kafka 0.9,咱们用的kafka是 3.0版本。

假如公司中想重置kafka。 删除每一个kafka logs 以及 datas,zk中的kafka 文件夹删除掉。

为什么要把消费者的偏移量从zk中挪到 kafka中呢?原因是避免Conusmer频发跟zk进行通信。

__consumer_offsets 主题里面采用 key 和 value 的方式存储数据。key 是group.id+topic+ 分区号,value 就是当前 offset 的值。每隔一段时间,kafka 内部会对这个 topic 进行 compact (压缩),也就是每个 group.id+topic+分区号就只保留最新数据。

9.kafka中数据挤压太多,怎么办?(提高消费者的效率)

10.Kafka中的数据在消费过程中,有漏消费和重复消费的情况,怎么办?

Kafka消息丢失和重复消费是常见的问题,可以通过以下方法来处理:

  1. 使用消息确认机制:在生产者发送消息时,可以设置消息确认机制,确保消息成功发送到Kafka集群。在消费者消费消息时,可以设置消息消费确认机制,确保消息成功消费。

  2. 使用消息偏移量来保证消费顺序:消费者可以在消费消息后保存消息的偏移量,以便在发生重复消费或消息丢失时,可以根据偏移量重新消费消息。

  3. 设置消息延迟时间:可以在消费者消费消息时设置消息的延迟时间,以防止消息重复消费。

  4. 使用幂等性保证:在生产者发送消息时,可以设置消息幂等性,确保同一消息不会被重复发送到Kafka集群。

  5. 使用消息日志和监控系统:可以通过监控系统监控消息的发送和消费情况,及时发现消息丢失或重复消费的问题,并进行处理。

总的来说,通过合理设置消息确认机制、消息偏移量、消息延迟时间、消息幂等性以及消息日志和监控系统,可以有效处理Kafka消息丢失和重复消费的问题。

11.Kafka中的数据在消费过程中,有漏消费和重复消费的情况,怎么办?

consumer是底层采用的是一个阻塞队列,只要一有producer生产数据,那consumer就会将数据消费。当然这里会产生一个很严重的问题,如果你重启一消费者程序,那你连一条数据都抓不到,但是log文件中明明可以看到所有数据都好好的存在。换句话说,一旦你消费过这些数据,那你就无法再次用同一个groupid消费同一组数据了。

原因:消费者消费了数据并不从队列中移除,只是记录了offset偏移量。同一个consumergroup的所有consumer合起来消费一个topic,并且他们每次消费的时候都会保存一个offset参数在zookeeper的root上。如果此时某个consumer挂了或者新增一个consumer进程,将会触发kafka的负载均衡,暂时性的重启所有consumer,重新分配哪个consumer去消费哪个partition,然后再继续通过保存在zookeeper上的offset参数继续读取数据。注意:offset保存的是consumer 组消费的消息偏移。

要消费同一组数据,你可以

采用不同的group。
通过一些配置,就可以将线上产生的数据同步到镜像中去,然后再由特定的集群区处理大批量的数据。

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

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

相关文章

鸿蒙华为商城APP案例

模拟器运行效果如下: 鸿蒙版APP-华为商城-演示视频

C++【STL容器系列(二)】vector的模拟实现

文章目录 1. vector的结构2. vector的默认成员函数2.1构造函数2.1.1 默认构造2.1.2 迭代器构造2.1.3 用n个val初始化构造 2.2 拷贝构造2.3 析构函数2.4 operator 3. vector iterator函数3.1 begin 和 cbegin函数3.2 end() 和 cend()函数 4. vector的小函数4.1 size函数4.2 capa…

git修改当前分支名称并推送到远程仓库

git修改当前分支名称并推送到远程仓库 在Git中修改当前分支的名称可以通过两种主要方式进行:直接在本地修改分支名称,或者如果你已经推送了分支到远程仓库,你也需要更新远程分支的名称。以下是详细步骤: 修改本地分支名称 查看当…

第 8 章 - Go语言 数组与切片

在Go语言中,数组和切片是两种非常基础且重要的数据结构。它们都用来存储一系列相同类型的元素,但是它们之间存在一些关键的区别。下面我们将详细探讨数组和切片的定义、使用以及切片的动态特性。 数组的定义和使用 定义 在Go语言中,数组是…

Linux开发讲课49--- Linux 启动过程分析

理解运转良好的系统对于处理不可避免的故障是最好的准备。 启动过程非常简单。内核在单核上以单线程和同步状态启动,似乎可以理解。但内核本身是如何启动的呢?initrd(initial ramdisk) 和引导程序(bootloader)具有哪些功能&#…

vscode中执行git合并操作需要输入合并commit信息,打开的nano小型文本编辑器说明-

1.前提: VScode中的git组件执行任何合并动作的时候需要提交远程合并的commit信息,然后编辑器自动打开的是nano文本编辑器 2.nano编辑器说明: 1.保存文件:按 Ctrl + O,然后按 Enter 来保存文件。 2.退出编辑器:按 Ctrl + X,这会退出 nano。 3.剪切文本:移动光标到要剪…

Java 并发相关集合

文章目录 一、CopyOnWriteArrayList 源码1.1. 概述1.2. 思想1.3. 源码① 数据结构② 初始化③ 添加元素④ 获取元素⑤ 删除元素 二、ArrayBlockingQueue 源码2.1. 概述2.2. 思想2.3. 源码① 数据结构② 初始化③ 阻塞式获取和新增元素④ 非阻塞式获取和新增元素⑤ 指定超时时间…

Mysql个人八股总结

1.一条 SQL 查询语句是如何执行的 第一步:连接器 连接数据库:当用户发起SQL查询时,连接器负责与数据库建立连接,验证用户身份并准备执行查询。 第二步:查询缓存 检查查询缓存:在执行查询之前&#xff0…

MySQL数据导入与清洗

在现代数据分析的工作流程中,数据导入与清洗是最基础且重要的环节。无论是通过CSV、Excel,还是SQL文件进行数据导入,数据清洗的操作对于数据的质量至关重要。高质量的数据源是后续分析的根本,数据清洗可以帮助分析者获得干净、整洁且可靠的数据集,减少数据噪音,提升分析的…

Linux如何更优质调节系统性能

一、硬件优化 增加物理内存:最直接的提升系统性能的方法。内存不足时,系统会频繁进行交换(swapping)活动,这会显著降低系统的响应速度,因为磁盘IO速度远低于内存访问速度。通过增加内存,可以减…

GET和POST的区别

GET 和 POST 是 HTTP 协议中最常用的两种请求方法,它们在用途、安全性、数据处理等方面存在显著差异。下面是 GET 和 POST 的详细对比: GET 请求 1. 用途: 主要用于从服务器获取数据。通常用于检索信息,如搜索、查询数据库等。…

AutoDL使用简记

AutoDL使用简记 一、前言二、AutoDL显卡配置、价格简介2.1显卡配置及价格2.2计费方式的种类2.3开通会员及优惠 三、AutoDL使用教程3.1选择深度学习架构3.2文件传输3.3运行程序 一、前言 在进行深度学习模型训练时,通常会面临本地显卡显存或者运行速度的不足&#x…

基于STM32智能电流表

采用STM32F103C8T6微控制器为核心,设计了一款精密的电流表。该电流表通过精确采集采样电阻上的分压信号,并进行信号放大处理,随后利用ADC(模数转换器)高效地捕获放大后的电压信号,通过一系列算法运算&#…

【harbor】离线安装2.9.0-arm64架构服务制作和升级部署

harbor官网地址:Harbor 参考文档可以看这里:部署 harbor 2.10.1 arm64 - 简书。 前提环境准备: 安装docker 和 docker-compose 先拉arm64架构的harbor相关镜像 docker pull --platformlinux/arm64 ghcr.io/octohelm/harbor/harbor-regist…

Java API类与接口:类的转换方法与正则表达式

文章目录 Java包装类的概述对应包装类包装类的转换方法(parse)Integer.parseInt(String s)Long.parseLong(String s)Byte.parseByte(String s)Short.parseShort(String s)Float.parseFloat(String s)Double.parseDouble(String s) 正则表达式常用方法 字符规则. 匹配…

Linux: network: ip link M-DOWN的具体含义是什么?

文章目录 参考简介实例代码解释openstack上的显示如果是在一个interface上建立了vlan参考 https://unix.stackexchange.com/questions/348327/using-ip-what-does-m-down-mean www.policyrouting.org/iproute2.doc.html#ss9.1 简介 是指上一级的接口的状态。 实例 4: ersp…

支持 Win10 的网络环境模拟(丢包,延迟,带宽)

升级 Windows 10 以后,原来各种网络模拟软件都挂掉了,目前能用的就是只有 clumsy: 唯一问题是不支持模拟带宽,那么平时要模拟一些糟糕的网络情况的话,是不太方便的,而开虚拟机用 Linux tc 或者设置个远程 l…

网页web无插件播放器EasyPlayer.js点播播放器遇到视频地址播放不了的现象及措施

在数字媒体时代,视频点播已成为用户获取信息和娱乐的重要方式。EasyPlayer.js作为一款流行的点播播放器,以其强大的功能和易用性受到广泛欢迎。然而,在使用过程中,用户可能会遇到视频地址无法播放的问题,这不仅影响用户…

.NET周刊【11月第2期 2024-11-10】

国内文章 .NET 全能高效的 CMS 内容管理系统 https://www.cnblogs.com/1312mn/p/18511224 SSCMS 是一个完全开源的企业级内容管理系统,基于 .NET Core 开发,适合跨平台部署。其特点包括支持多终端发布和功能插件,具有完善的权限控制和安全…

Pytorch从0复现worc2vec skipgram模型及fasttext训练维基百科语料词向量演示

目录 Skipgram架构 代码开源声明 Pytorch复现Skip-gram 导包及随机种子设置 维基百科数据读取 建立词频元组列表并根据词频排序 建立词频字典,word_id字典,id_word字典 二次采样 正采样与负采样 Skipgram模型类 模型训练 词向量输出 近义词寻找 fasttext训练Skip-…