大数据高级阶段面试题(实时)

2024-05-07 09:28

本文主要是介绍大数据高级阶段面试题(实时),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.Kafka的producer如何实现幂等性?

①开启幂等性,将Idempotent设置为true

②将ack设置为-1,确保相同的消息只会发送一次,避免重新发送

2.Kafka的ISR和OSR的作⽤分别是什么?

ISR是副本和领导者的数据和状态要保持一致,如果出现网络波动导致领导者宕机了,ISR会选择一个副本成为新的领导者,保证数据的高可用。

OSR是指副本和领导者的数据和状态可能因为网络波动导致没有保持一致,OSR需要追上领导者的数据

3.Kafka⽣产者如何实现幂等性写⼊和事务?

幂等性:

①开启幂等性,将Idempotent设置为true

②将ack设置为-1,确保相同的消息只会发送一次,避免重新发送

事务:Kafka开启事务,必须要先开启幂等性

①生产者使用事务之前,必须先自定义一个事务id,kafka根据事务id分配事务协调器

②事务协调器会返回一个pid

③生产者开始发送数据到topic,不过这些数据和之前的数据不同,他们都带着一个字段,表示自己是事务信息

④当生产者消息发送完毕,会向事务协调器发送commit请求或者是abort请求

⑤事务协调器收到请求后会持久化transcation_state中,transcation_state默认有50个分区,每个分区负责一部分事务

⑥事务协调器后台会跟topic通信,告诉他们事务是成功了还是失败了

4.Kafka消费者位置提交⽅式有哪些?分别什么场景下使⽤?

1.自动提交:

消费者定期将偏移量提交到kafka,提交的频率由消费者配置的参数控制,适用于一些对数据一致性要求不高的场景,但可能导致消息被重复处理或者是丢失

2.手动同步提交:

消费者在消费完一批数据之后,调用commitSync方法来提交偏移量,这种方式可以确保消息的一次性处理,适用于对数据一致性要求较高的场景,但可能会影响消费者的吞吐量

3.手动异步提交:

消费者在消费完一批数据之后,调用commitAsync方法异步提交偏移量,异步提交不会阻塞消费者的处理线程,从而提高吞吐量,但是异步提交可能会导致消息的重复处理或者是丢失,需要消费者设置适当的异常处理和重试机制。

5.Kafka消息丢失场景有哪些?如何避免?

①生产者发送消息失败:

生产者发送消息时发生错误,并且没有设置重试机制,就有可能导致数据丢失,这个时候我们可以设置合适的重试次数以及重试间隔

②消息在网络传输过程中丢失:

生产者发送消息到kafka的过程中,可能会遇到网络波动或者是配置不当导致数据丢失,这时候我们可以设置重试机制和调整网络配置来提高稳定性

③消费者处理消息失败:

消费者在消费数据时发生错误,并且没有设置适当的错误处理和重试机制,那么消息就有可能丢失,需要我们设置重试机制来确保消息能够被正确处理并且不会丢失。

6.Kafka消费组重新平衡流程

每个消费者启动之后都会自动加入所属的消费者组中,并且向协调器发送心跳表示是运行状态

当消费者启动之后,首先向协调器发送加入组的请求,如果消费者组中已经存在了这个消费者,协调器就返回成功,否则协调器会将其加到消费者队列中,并通知其他消费者进行重平衡

新的消费者加入之后,协调器会按照订阅的主题计算出当前消费者负责消费的分区,并将分配结果发送给消费者,消费者在接收到分配结果之后,可以根据分区信息消费对应的消息

7.Kafka消费者分区分配策略

Range(范围分区):

首先我们会对每个topic下的partition进行排序,然后对消费者按照字母进行排序,然后用分区数除以消费者数量。例子:假如现在我们有十个分区,三个消费者,那么就是10除以3,如果除不尽,那么前面的消费者就会多消费一个分区。

弊端就是前面的消费者会比后面的消费者多处理几个分区的数据,会出现负载均衡的现象

RoundRoBin(轮询分区):

将消费者和分区按照字典序进行排序,然后通过轮询的方法将分区逐个分配给每个消费者,但是也可能会出现负载不均衡的情况

StickyAssignor(粘性分区):

分区的分配要尽可能的均匀,消费者之间的分区数最多相差一个

分区的分配尽可能要与上次分配的保持相同

8.ClickHouse中ReplicatedMergeTree是什么?有什么优点?

ReplicatedMergeTree是一种数据表引擎,用于处理分布式环境下的数据复制和合并,是MergeTree表引擎的一个扩展,用于在分布式环境中实现数据的可靠复制和合并

优点

①:ReplicatedMergeTree表支持数据的复制和分布式存储,可以在多个节点上存储数据的副本,并且可以跨多个节点分布数据以实现负载均衡

②:ReplicatedMergeTree表可以合并来自不同节点的数据,保证数据的一致性和完整性

③:由于ReplicatedMergeTree支持数据复制,因此具有良好的容错性和高可用性,即使某个节点发生故障,仍然可以从其他节点获取数据

缺点:

性能消耗:由于ReplicatedMergeTree需要进行数据复制和合并,可能会导致额外的性能消耗,在处理大规模数据的时候,可能会成为性能瓶颈

一致性和延迟:由于数据复制和合并需要一定的时间,因此在分布式环境中可能存在一致性和延迟问题,在某些情况下,可能需要额外的措施来确保数据的一致性和实时性

9.ClickHouse的分布式查询流程是什么样的?

10.ClickHouse存储结构及优势

优势

列式存储:

ClickHouse采用列式存储结构,数据按列存储,而不是将整行数据存储在一起,这种存储方式有助于提高查询性能,在数据规模大的情况下,可以减少磁盘io和内存消耗。

数据分区:

ClickHouse支持对数据进行分区,可以根据时间范围或其他维度将数据划分为不同的分区,这种分区存储结构有助于提高查询性能,可以根据查询需求只加载特定分区的数据,减少不必要的数据扫描。

11.ClickHouse各种索引的区别和使⽤场景

一级索引:

一级索引是表的主键索引,主键索引是表中一列或多列的唯一标识,用于快速定位每一行数据,一级索引在ClickHouse中是必须的,每张表必须有一个一级索引

稀疏索引:

索引标记对应的是一段数据, 但是查询速度可能会受影响,因为某些数据无法直接通过索引定位到,从而需要进行更多的磁盘访问

稠密索引:

索引标记对应到一行具体的数据记录,查询速度快,每行数据都能通过索引快速定位到,但是会占用更多的存储空间

二级索引:

二级索引是指除了主键索引之外的其他索引,用于加速查询非主键列

12.ClickHouse查询性能优化

索引优化:

使用适当的索引类型,根据查询模式创建合适的索引

数据分区:

利用ClickHouse的分区功能,将数据按照时间范围或其他维度进行分区存储,这样可以降低单个分区的数据量,提高查询性能,同时也便于数据的维护和管理

硬件优化:

提供足够的硬件资源,升级配置

数据压缩:

使用合适的压缩算法来减少存储空间,同时也能提高读取速度,ClickHouse提供了多种压缩算法,可以根据数据的特点选择合适的压缩方式

13.Flink窗口机制有哪些?应⽤场景分别是什么?

滑动窗口:

滑动窗口在固定大小的窗口上定义了一个滑动步长,窗口之间可以有重叠部分,常用于连续的数据流分析

滚动窗口:

滚动窗口将数据按照固定的大小进行划分,窗口之间没有重叠,常用于对实时数据进行周期性的统计分析,如每分钟,每小时。

会话窗口:

当数据流中一段时间内没有数据到达时,会话窗口结束,会话窗口需要制定两个参数,会话超时时间和间隔时间,当某个数据到达时,会话窗口会检查该数据与前一个数据的时间间隔,如果超过了会话超时时间,则结束前一个会话窗口并开始一个新的会话窗口

全局窗口:

全局窗口将整个数据流视为一个窗口,通常用于一次性对整个数据流进行统计分析

处理时间窗口:

根据数据的处理时间来划分窗口,即数据到达flink算子的时间,适用于对实时数据进行快速分析,不考虑事件时间顺序的场景

事件时间窗口:

根据数据中的事件时间来划分窗口,即数据中的时间戳,用于处理具有时间顺序的数据流,可以解决数据延迟,乱序等问题

这篇关于大数据高级阶段面试题(实时)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/966964

相关文章

SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南

《SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南》本文将基于开源项目springboot-easyexcel-batch进行解析与扩展,手把手教大家如何在SpringBo... 目录项目结构概览核心依赖百万级导出实战场景核心代码效果百万级导入实战场景监听器和Service(核心

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

pandas数据的合并concat()和merge()方式

《pandas数据的合并concat()和merge()方式》Pandas中concat沿轴合并数据框(行或列),merge基于键连接(内/外/左/右),concat用于纵向或横向拼接,merge用于... 目录concat() 轴向连接合并(1) join='outer',axis=0(2)join='o

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分