首页 > 其他分享 >面试官问:为什么kafka这么快,又能保证消息不丢失?

面试官问:为什么kafka这么快,又能保证消息不丢失?

时间:2022-11-25 12:32:54浏览次数:42  
标签:面试官 性能 内存 Kafka 小菜 消息 kafka 丢失


小菜鸡最近在疯狂面试中,就是为了能拿到一份满意的offer,这不上周又去头条受虐了。

面试过程中,由于小菜鸡的充分准备(letcode各种刷),各种算法题不在话下,顺利的通过的头条变态的算法面试。

面试官: ​​我看你项目中用到了kafka,你觉得你这个场景一定需要kafka吗,有没有其它替代方案?​

小菜鸡一听,很紧张啊,早知道简历上不写kafka了,原因你懂得,就好像redis只会put和get,kafka只会生产和消费,领导说用什么,就用什么。

小菜鸡挠挠头: ​​当时接手这个项目的时候,设计方案已经定型了,如果要采用其它方案实现的话,改造成本比较大,不太实际,所以也就一直没对这块逻辑进行架构上的调整。​

小菜鸡回答完,好想给自己的机智点赞。

面试官似乎还想在kafka上为难小菜鸡: ​​那你知道为什么kafka这么快,又能保证消息不丢失?​

小菜鸡实在没有过多的接触过kafka,只能投降了。

要回答上述问题,需要对kafka有较深入的理解。

如何做到消息不丢失

ACK 机制

通过 ACK 机制保证消息送达。Kafka 采用的是至少一次(At least once),消息不会丢,但是可能会重复传输。

发送消息

为了得到更好的性能,Kafka 支持在生产者一侧进行本地buffer,也就是累积到一定的条数才发送,如果这里设置不当是会丢消息的。

生产者端设置 producer.type=async, sync,默认是 sync。

当设置为 async,会大幅提升性能,因为生产者会在本地缓冲消息,并适时批量发送。

如果对可靠性要求高,那么这里可以设置为 sync 同步发送。

消费消息

如果更注重可靠性,则需要显示提交 Offset,也就是当所有业务都处理完成的时候,再提交 Offset。这样会导致重复消费,需要提供幂等性接口。

为什么 Kafka 性能高?

顺序写磁盘

顺序写磁盘的性能是随机写入的性能的6000倍的提升,媲美内存随机访问的性能,磁盘不再是瓶颈点。

Page Cache

为了优化读写性能,Kafka利用了操作系统本身的Page Cache,就是利用操作系统自身的内存而不是JVM空间内存。通过操作系统的Page Cache,Kafka的读写操作基本上是基于内存的,读写速度得到了极大的提升。

零拷贝技术

零拷贝技术,可以有效的减少上下文切换和拷贝次数。

标签:面试官,性能,内存,Kafka,小菜,消息,kafka,丢失
From: https://blog.51cto.com/u_13940603/5886349

相关文章

  • Kafka是什么-第一篇
    前言如果有幸目睹过系统从零到一的演变过程,大家估计都会有一种感叹,就是随着业务复杂度和流量的不断上升,系统变得越来越难以维护,面对高额的维护成本,攻城师们不得不对现有架构......
  • Kafka 消费端分区重平衡
    Kafka消费端分区重平衡什么是分区再均衡分区的所有权从一个消费者转移到另一个消费者,这样的行为被称为分区再均衡(Rebalance)。Rebalance实现了消费者群组的高可用性和伸......
  • 消息队列服务Kafka揭秘:痛点、优势以及适用场景
    消息队列服务Kafka揭秘:痛点、优势以及适用场景转载摘要:消息队列Kafka是一个分布式的、高吞吐量、高可扩展性消息队列服务,广泛用于日志收集、监控数据聚合、流式数据处理......
  • Kafka常见痛点及优化方案
    Kafka常见痛点及优化方案daas是一种对企业数据能力服务化的架构就像iaaspaas虚拟化了计算机的算力存储和网络及中间件一样daas虚拟化了企业数据作为一个云服务提供出来可......
  • Kafka学习
    Kafka学习一、kafka所需的命令启动kafka要先启动zookeeper,zookeeper学习可以参考bilibili的尚硅谷的教程:07_尚硅谷_zk_本地_安装_哔哩哔哩_bilibili。启动kafka需要执行......
  • Kafka 日志存储及其清除策略
    Kafka日志存储及其清除策略日志存储结构Kafka存储结构图:kafka中消息是以主题topic为基本单位进行归类的,这里的topic是逻辑上的概念,实际上在磁盘存储是根据分区存......
  • 【解决了一个小问题】es query返回数据中, int64类型精度丢失的问题
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯首先定义了一个简单的结构体来接收esquery返回的数据://E......
  • Kafka 延时队列,重试队列,死信队列
    延时队列在发送延时消息的时候并不是先投递到要发送的真实主题(real_topic)中,而是先投递到一些Kafka内部的主题(delay_topic)中,这些内部主题对用户不可见,然后通过一个自定......
  • Docker搭建Kafka集群
    对于个人开发者而言,一般手头上没有多台服务器,有人可能会有云服务器,不过一般也只会买一台来用用就好;有人可能更习惯将本机当作服务器来玩。都可以。那么如何通过一台服务器或......
  • Kafka分区分配策略
    生产者发送消息分区分配策略kafka里的partitioner(分区器)来负责客户端生产层面的负载均衡。如果指定分区,就直接使用该分区。未指定分区但存在key,则根据序列化key使用......