好多kafka难题啊,看看其中的化解之道
文末有面经共享群
前面已经分享过几篇面试了,这是一篇关于更加面向项目和技术的面经详解,第一次遇见问那么多kafka的问题,看看这个粉丝是怎么回答的。
先来看看 职位描述:
岗位职责:
- 负责基于 Go 的后端服务的设计、开发和维护;
- 参与系统架构设计,确保系统的高可用性、高性能和可扩展性;
- 编写高质量、可维护的代码,并进行代码评审;
- 解决复杂的技术问题,优化系统性能;
- 与跨职能团队合作,确保项目按时交付;
- 编写技术文档和开发规范,提升团队整体开发效率;
- 参与新技术的研究和引入,推动技术创新。
岗位要求:
- 计算机科学或相关专业本科及以上学历,思维逻辑清晰;
- 5年以上软件开发经验,至少3年Go语言开发经验;
- 熟悉 Go 语言的标准库和常用框架,了解 Go 语言的内存管理和并发模型;
- 具备微服务架构设计和开发经验,熟悉 gRPC、Protobuf 等技术;
- 熟悉常见的数据库(如 MySQL、PostgreSQL)和缓存技术(如 Redis);
- 有良好的代码风格和编写高质量单元测试的习惯;
- 熟悉 Docker、Kubernetes 等容器技术,具备一定的 DevOps 经验;
- 具备较强的分析和解决问题的能力,良好的沟通和团队协作能力;
- 有开源项目贡献者或个人技术博客者优先。
加分项:
- 有 Rust 开发经验,熟悉其他编程语言(如 Python、C++等);
- 有金融行业交易系统开发经验,如行情报价、交易、风控等。
面试流程
来看看面试的全过程:
自我介绍
说一下项目的业务,怎么做的,难点在哪,如何解决?
- 消息队列:数据倾斜问题,数据不丢,重复消费
- redis:使用hash以及Pipline,bigkey拆解
- 数据库:性能优化,分库分表
数据库优化设置lock_timeout是哪个锁的超时
数据库优化设置中的 lock_timeout 主要是针对行锁的超时设置。当一个事务在等待获取行锁时,如果超过了 lock_timeout 设置的时间,就会抛出超时错误,避免事务长时间等待而导致系统性能下降。
kafka集群规模
我们的 Kafka 集群规模为 5 台服务器,能够支持 50 万的并发量。通过合理的配置和优化,我们可以进一步提高 Kafka 集群的性能和并发能力。
kafka为什么支持高并发
Kafka 支持高并发主要有以下几个原因:
- 分区:Kafka 将数据分成多个分区,每个分区可以在不同的服务器上进行存储和处理,从而实现了水平扩展,提高了系统的并发能力。
- 零拷贝:Kafka 采用了零拷贝技术,减少了数据在内存中的复制次数,提高了数据的传输效率。
- 网络压缩:Kafka 支持网络压缩,可以减少网络传输的数据量,提高系统的性能和并发能力。
说一下什么是零拷贝
零拷贝是一种技术,主要通过减少数据在内存中的复制次数来提高数据的传输效率。在 Kafka 中,零拷贝技术主要通过使用 mmap 函数实现。mmap 函数将文件映射到内存中,使得应用程序可以直接访问文件内容,而不需要进行数据的复制。这样可以减少数据在内存中的复制次数,提高数据的传输效率。
为什么选择kafka
首先,Kafka 具有很高的并发处理能力,能够满足金融交易系统对高吞吐量的要求。其次,Kafka 的扩容性非常好,可以很容易地增加服务器节点来提高系统的性能。此外,Kafka 天生适合集群部署,并且使用 Java 和 Scala 编写,便于进行问题排查和维护。相比之下,RabbitMQ 的集群部署相对复杂,而且使用 Erlang 语言,对于一些开发人员来说可能不太熟悉,问题排查也比较困难。
Api 网关用来做什么的?
Api 网关主要用于对第三方调用进行流量限制和安全控制。它可以对请求进行过滤、路由和负载均衡,确保系统的稳定性和安全性。同时,Api 网关还可以提供一些额外的功能,如身份验证、授权、监控和统计等。
支付模块这块怎么做的
参与的项目中,支付模块是由其他同事负责开发的。我主要是通过调用支付模块提供的 API 来实现相关业务功能。在调用 API 时,我会确保参数的正确性和安全性,同时对返回结果进行合理的处理和错误处理。
说一下你们微服务的架构是怎么样的
我们的系统采用了无服务和微服务的混合架构。这种架构可以充分发挥无服务架构的弹性和高效性,同时又能利用微服务架构的灵活性和可扩展性。在具体实现中,我们将一些通用的功能模块封装成无服务函数,通过事件驱动的方式进行调用。而对于一些复杂的业务模块,则采用微服务架构,进行独立开发和部署。
差分升级是怎么实现的
通过对比不同版本的代码,找出差异部分,然后将这些差异部分抽取出来进行计算 MD5 值等操作,以确定是否需要进行升级。在升级过程中,我们会确保数据的完整性和一致性,同时尽量减少对系统的影响。
编译服务类似CI/CD
通过修改 Git 命令,实现了类似于 Web Hook 的功能。当有代码提交并打上 tag 时,系统会自动进行 Git clone 操作,然后进行测试和编译。这样可以确保代码的质量和稳定性,同时提高开发效率。
C/C++是开发固件的吧
是的,我曾经使用 C/C++ 和 Lua 的组合开发过智能网关。不过,由于我这次是应聘后端开发岗位,所以没有将这部分内容写在简历中。
你很喜欢用redis?
是的,我非常喜欢使用 Redis。Redis 就像一个数据结构数据库,它提供了丰富的数据结构和操作接口,使用起来非常方便。在项目中,我们使用 Redis 实现了很多业务功能,比如缓存热点数据、实现分布式锁、进行任务队列管理等。
反问
结尾
大家可以看出来,在这场深入的技术面试中,需要应试者具备强大的技术功底和应对各种挑战的能力。面试官询问的方向好像大多是 Kafka 的高并发处理的问题,不知道这次的面经有没有给你带来哪些学习要点呢?也希望通过分享这位面试者的经历,能给正在求职或致力于技术提升的你带来启发和帮助。
欢迎关注
我们搞了一个免费的面试真题共享群,互通有无,一起刷题进步。
没准能让你能刷到自己意向公司的最新面试题呢。
感兴趣的朋友们可以加我微信:wangzhongyang1993,备注:【博客园】。
好多kafka难题啊,看看其中的化解之道的更多相关文章
- DISC社交风格测试题--老虎 孔雀 考拉 猫头鹰
凭直觉,迅速回答 "我是谁",而不是"我应该是谁,或我想我是谁". 1.关于人生观,我的内心其实是: A 希望能够有尽量多的人生体验,所以会有非常多样化的想法. ...
- 基于Kafka Connect框架DataPipeline可以更好地解决哪些企业数据集成难题?
DataPipeline已经完成了很多优化和提升工作,可以很好地解决当前企业数据集成面临的很多核心难题. 1. 任务的独立性与全局性. 从Kafka设计之初,就遵从从源端到目的的解耦性.下游可以有很多 ...
- 【Azure 应用服务】部署Kafka Trigger Function到Azure Function服务中,解决自定义域名解析难题
问题描述 经过前两篇文章,分别使用VM搭建了Kafka服务,创建了Azure Function项目,并且都在本地运行成功. [Azure Developer]在Azure VM (Windows) 中 ...
- 4 亿用户,7W+ 作业调度难题,Bigo 基于 Apache DolphinScheduler 巧化解
点击上方 蓝字关注我们 ✎ 编 者 按 成立于 2014 年的 Bigo,成立以来就聚焦于在全球范围内提供音视频服务.面对 4 亿多用户,Bigo 大数据团队打造的计算平台基于 Apache Dolp ...
- RabbitMQ和Kafka
转自通九大神的博客 起因 最近公司RabbitMQ的集群出了点问题,然后有些亲就说RabbitMQ慢且不好用,是一个瓶颈,不如换成Kafka.而我本人,使用RabbitMQ有一点久了,认为这个事情应当 ...
- 四万字32图,Kafka知识体系保姆级教程宝典
本文目录: 一.消息队列 Apache Pulsar Pulsar 与 Kafka 对比 二.Kafka基础 三.Kafka架构及组件 四.Kafka集群操作 五.Kafka的JavaAPI操作 六. ...
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- Spark Streaming+Kafka
Spark Streaming+Kafka 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端, ...
- Kafka使用入门教程
转载自http://www.linuxidc.com/Linux/2014-07/104470.htm 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自 ...
- kafka入门教程链接
http://www.aboutyun.com/forum.php?mod=viewthread&tid=12882 经典入门教程 1.Kafka独特设计在什么地方?2.Kafka如何搭建及创 ...
随机推荐
- 【资料分享】RK3568核心板规格书(4x ARM Cortex-A55(64bit),主频1.8GHz)
1 核心板简介 创龙科技SOM-TL3568是一款基于瑞芯微RK3568J/RK3568B2处理器设计的四核ARM Cortex-A55全国产工业核心板,每核主频高达1.8GHz/2.0GHz.核心板 ...
- 为什么js中要用new?
你new的不是对象,是构造函数,new + 构造函数生成对象.如果单就调用方法而言,确实不必用new.new一般用在"js使用原型和this关键字实现面向对象"的过程中. 大多数情 ...
- 洛谷P1464
搜索优化后是记忆化搜索,再优化就是dp了 #include <iostream> #include <utility> using namespace std; typedef ...
- Java开发工具和历史版本
eclipse 的历史版本: 版本代号 平台版本 主要版本发行日期 SR1发行日期 SR2发行日期 SR3发行日期 代号名称 N/A 3.0 2004年6月21日 [2] N/A N/A N/A N ...
- PowerBuilder编程新思维10.5:外传2(PowerPlume下一代开发解决方案)
万里归来年愈少 PB编程新思维10.5:外传2(PowerPlume下一代解决方案) 前言 今天我们就来盘点一下,PB下一代开发的所有技术可能性.所谓下一代开发技术,就是指脱离或半脱离PBVM的应用开 ...
- 【解决方案】智能UI自动化测试
你的UI自动化追得上业务的变更和UI更迭吗?当今瞬息万变的时代,成千上万的App围绕着现代人生活的点点滴滴.为了满足用户的好的体验和时刻的新鲜感,这些App需要时刻保持变化,也给 UI自动化落地实施带 ...
- django python 循环一个月的每一天
from datetime import datetime, timedelta def get_dates_in_month(year, month): start_date = datetime( ...
- 操作系统|SPOOLing(假脱机)技术
什么是假脱机技术,它可以解决什么问题? 什么是脱机技术 要回答什么是假脱机技术,首先我们需要知道什么是脱机技术.<计算机操作系统(第四版)>写道: 为了解决人机矛盾及CPU和I/O设备之间 ...
- 5/15课下作业:评价一下steam软件
用户界面: 登录后会弹出特惠广告,广告内容可能不常用.主界面简洁方便,启动游戏,购买游戏,浏览社区,浏览自己内容一目了然 记住用户选择: 登录一次后会记住用户的账户密码,可以直接进行用户间的切换,会记 ...
- 对比python学julia(第四章:人工智能)--(第二节)人脸识别
2.1. 项目简介 人脸识别是基于人的脸部特征信息进行身份识别的一种图像识别技术.使用0PenCV 进行人脸识别的过程如下. (1) 针对每个识别对象收集大量的人脸图傣作为样本. (2) 将样本 ...