面试题篇-13-Kafka相关面试题

2023-11-01

1. 什么是消息队列?

消息队列Message Queue,简称MQ。
是一种应用间的通信方式,主要由三个部分组成。
在这里插入图片描述

  • 生产者:Producer
    消息的产生者与调用端
    主要负责消息所承载的业务信息的实例化是一个队列的发起方
  • 代理:Broker
    主要的处理单元
    负责消息的存储、投递、及各种队列附加功能的实现
    是消息队列最核心的组成部分
  • 消费者:Consumer
    一个消息队列的终端也是消息的调用端,具体是根据消息承载的信息,处理各种业务逻辑。

消息队列的应用场景较多,常用的可以分为三种:

  • 异步处理
    主要应用于对实时性要求不严格的场景,
    比如:用户注册发送验证码、下单通知、发送优惠券等等。服务方只需要把协商好的消息发送到消息队列,剩下的由消费消息的服务去处理,不用等待消费服务返回结果
    在这里插入图片描述
  • 应用解耦
    应用解耦可以看作是把相关但耦合度不高的系统联系起来。比如订单系统与 WMS、EHR 系统,有关联但不哪么紧密,每个系统之间只需要把约定的消息发送到 MQ,另外的系统去消费即可。
    解决了各个系统可以采用不同的架构、语言来实现,从而大大增加了系统的灵活性。
    在这里插入图片描述
  • 流量削峰
    流量削峰一般应用在大流量入口且短时间内业务需求处理不完的服务中心,为了权衡高可用,把大量的并行任务发送到 MQ 中,依据MQ 的存储及分发功能,平稳的处理后续的业务,起到一个大流量缓冲的作用。
    在这里插入图片描述
    目前市面上常见的消息队列中间件主要有
    ActiveMQ、RabbitMQ、Kafka、RocketMQ 这几种,

在架构技术选型的时候一般根据业务的需求选择合适的中间件:
比如中小型公司,低吞吐量的一般用 ActiveMQ、RabbitMQ 较为合适,大数据高吞吐量的大型公司一般选用 Kafka 和RocketMQ。

2. kafka 的零拷贝原理?

在实际应用中,如果我们需要把磁盘中的某个文件内容发送到远程服务器上,那么它必须要经过几个拷贝的过程,如图(贴图)。
在这里插入图片描述

  • 从磁盘中读取目标文件内容拷贝到内核缓冲区
  • CPU 控制器再把内核缓冲区的数据赋值到用户空间的缓冲区中
  • 接着在应用程序中,调用 write()方法,把用户空间缓冲区中的数据拷贝到内核下的Socket Buffer 中。
  • 最后,把在内核模式下的 SocketBuffer 中的数据赋值到网卡缓冲区(NIC Buffer)
  • 网卡缓冲区再把数据传输到目标服务器上。

在这个过程中我们可以发现,数据从磁盘到最终发送出去,要经历 4 次拷贝,而在这四次拷贝过程中,有两次拷贝是浪费的,分别是:

  • 从内核空间赋值到用户空间
  • 从用户空间再次复制到内核空间

除此之外,由于用户空间和内核空间的切换会带来 CPU 的上线文切换,对于 CPU 性能也会造成性能影响。
而零拷贝,就是把这两次多于的拷贝省略掉,应用程序可以直接把磁盘中的数据从内核中直接传输给Socket,而不需要再经过应用程序所在的用户空间,如下图所示
在这里插入图片描述
零拷贝通过DMA(Direct Memory Access)技术把文件内容复制到内核空间中的Read Buffer,
接着把包含数据位置和长度信息的文件描述符加载到Socket Buffer 中,DMA 引擎直接可以把数据从内核空间中传递给网卡设备。
在这个流程中,数据只经历了两次拷贝就发送到了网卡中,并且减少了 2 次cpu 的上下文切换,对于效率有非常大的提高。

所以,所谓零拷贝,并不是完全没有数据赋值,只是相对于用户空间来说,不再需要进行数据拷贝。对于前面说的整个流程来说,零拷贝只是减少了不必要的拷贝次数而已。

在程序中如何实现零拷贝呢?

  • 在Linux 中,零拷贝技术依赖于底层的sendfile()方法实现
  • 在Java 中,FileChannal.transferTo() 方法的底层实现就是 sendfile() 方法。

除此之外,还有一个 mmap 的文件映射机制;
它的原理是:将磁盘文件映射到内存, 用户通过修改内存就能修改磁盘文件。使用这种方式可以获取很大的 I/O 提升,省去了用户空间到内核空间复制的开销。

3. Kafka 如何保证消息不丢失?

kafka 是一个用来实现异步消息通信的中间件,它的整个架构由Producer、 Consumer、Broker 组成。
在这里插入图片描述
所以,对于kafka 如何保证消息不丢失这个问题,可以从三个方面来考虑和实现。

3.1 Producer 端

首先是Producer 端,需要确保消息能够到达 Broker 并实现消息存储,在这个层面,有可能出现网络问题,导致消息发送失败,所以,针对Producer 端,可以通过 2 种方式来避免消息丢失

  • Producer 默认是异步发送消息,这种情况下要确保消息发送成功,有两个方法
    • a.把异步发送改成同步发送,这样producer 就能实时知道消息发送的结果。
    • b.添加异步回调函数来监听消息发送的结果,如果发送失败,可以在回调中重试。
  • Producer 本身提供了一个重试参数retries,如果因为网络问题或者 Broker 故障导致发送失败,Producer 会自动重试。

3.2 Broker 端

然后是Broker 端,Broker 需要确保Producer 发送过来的消息不会丢失,也就是只需要把消息持久化到磁盘就可以了。
(如图)但是,Kafka 为了提升性能,采用了异步批量刷盘的实现机制,也就是说按照一定的消息量和时间间隔来刷盘,而最终刷新到磁盘的这个动作,是由操作系统来调度的,所以如果在刷盘之前系统崩溃,就会导致数据丢失。
在这里插入图片描述
Kafka 并没有提供同步刷盘的实现,所以针对这个问题,需要通过Partition的副本机制和acks 机制来一起解决。

  • “我简单说一下 Partition 副本机制,它是针对每个数据分区的高可用策略,每个 partition 副本集包含唯一的一个 Leader 和多个 Follower,Leader 专门处理事务类的请求,Follower 负责同步Leader 的数据”。
  • 在这样的一种机制的基础上,kafka 提供了一个acks 的参数,Producer 可以设置acks参数再结合Broker 的副本机制来个共同保障数据的可靠性。
  • acks 有几个值的选择。
    • acks=0, 表示producer 不需要等Broker 的响应,就认为消息发送成功,这种情况会存在消息丢失。
    • acks=1,表示Broker 中的Leader Partition 收到消息以后,不等待其他 Follower Partition 同步完,就给Producer 返回确认,这种情况下Leader Partition 挂了,会存在数据丢失。
    • acks=-1,表示Broker 中的Leader Parititon 收到消息后,并且等待 ISR 列表中的follower 同步完成,再给 Producer 返回确认,这个配置可以保证数据的可靠性。

3.3 Consumer

最后,就是Consumer 必须要能消费到这个消息,实际上,我认为,只要producer和broker 的消息可靠的到了保障,那么消费端是不太可能出现消息无法消费的问题,除非是Consumer 没有消费完这个消息就直接提交了,但是即便是这个情况,也可以通过调整offset 的值来重新消费。

4. Kafka 怎么避免重复消费?

首先,(如图)Kafka Broker 上存储的消息,都有一个Offset 标记。然后kafka 的消费者是通过 offSet 标记来维护当前已经消费的数据,
每消费一批数据,Kafka Broker 就会更新OffSet 的值,避免重复消费。
在这里插入图片描述
默认情况下,消息消费完以后,会自动提交 Offset 的值,避免重复消费。
Kafka 消费端的自动提交逻辑有一个默认的 5 秒间隔,也就是说在 5 秒之后的下一次向 Broker 拉取消息的时候提交。
所以在Consumer 消费的过程中,应用程序被强制 kill 掉或者宕机,可能会导致 Offset没提交,从而产生重复提交的问题。
除此之外,还有另外一种情况也会出现重复消费。

(如图)在Kafka 里面有一个Partition Balance 机制,就是把多个Partition 均衡的分配给多个消费者。
在这里插入图片描述
Consumer 端会从分配的Partition 里面去消费消息,如果 Consumer 在默认的 5 分钟内没办法处理完这一批消息。
就会触发Kafka 的Rebalance 机制,从而导致Offset 自动提交失败。
而在重新Rebalance 之后,Consumer 还是会从之前没提交的 Offset 位置开始消费,也会导致消息重复消费的问题。

基于这样的背景下,我认为解决重复消费消息问题的方法有几个:

  • 提高消费端的处理性能避免触发Balance,比如可以用异步的方式来处理消息,缩短单个消息消费的市场。或者还可以调整消息处理的超时时间。还可以减少一次性从Broker 上拉取数据的条数。
  • 可以针对消息生成md5 然后保存到 mysql 或者redis 里面,在处理消息之前先去 mysql 或者redis 里面判断是否已经消费过。这个方案其实就是利用幂等性的思想。

5. 什么是 ISR,为什么需要引入 ISR?

首先,发送到 Kafka Broker 上的消息,最终是以 Partition 的物理形态来存储到磁盘上的。
(如图)而Kafka 为了保证Parititon 的可靠性,提供了 Paritition 的副本机制,然后在这些Partition 副本集里面。存在Leader Partition 和Flollower Partition。
生产者发送过来的消息,会先存到 Leader Partition 里面,然后再把消息复制到 Follower Partition,
这样设计的好处就是一旦Leader Partition 所在的节点挂了,可以重新从剩余的 Partition 副本里面选举出新的 Leader。
然后消费者可以继续从新的 Leader Partition 里面获取未消费的数据。
在这里插入图片描述
在Partition 多副本设计的方案里面,有两个很关键的需求。

  • 副本数据的同步
  • 新Leader 的选举

这两个需求都需要涉及到网络通信,Kafka 为了避免网络通信延迟带来的性能问题,以及尽可能的保证新选举出来的Leader Partition 里面的数据是最新的,所以设计了 ISR 这样一个方案。

ISR 全称是 in-sync replica,它是一个集合列表,里面保存的是和 Leader Parition 节点数据最接近的 Follower Partition
如果某个Follower Partition 里面的数据落后 Leader 太多,就会被剔除 ISR 列表。
简单来说,ISR 列表里面的节点,同步的数据一定是最新的,所以后续的Leader 选举,只需要从ISR 列表里面筛选就行了。
所以,我认为引入ISR 这个方案的原因有两个:

  • 尽可能的保证数据同步的效率,因为同步效率不高的节点都会被踢出 ISR 列表。
  • 避免数据的丢失,因为 ISR 里面的节点数据是和 Leader 副本最接近的。以上就是我对这个问题的理解

6. Kafka 如何保证消息消费的顺序性?

首先,在 kafka 的架构里面,用到了 Partition 分区机制来实现消息的物理存储(如图),在同一个topic 下面,可以维护多个partition 来实现消息的分片。
在这里插入图片描述
生产者在发送消息的时候,会根据消息的 key 进行取模(如图),来决定把当前消息存储到哪个partition 里面。
并且消息是按照先后顺序有序存储到 partition 里面的。
在这里插入图片描述
在这种情况下,(如图),假设有一个topic 存在三个partition,而消息正好被路由到三个独立的partition 里面。
然后消费端有三个消费者通过 balance 机制分别指派了对应消费分区。因为消费者是完全独立的网络节点,
所有可能会出现,消息的消费顺序不是按照发送顺序来实现的,从而导致乱序的问题。
在这里插入图片描述
针对这个问题,一般的解决办法就是自定义消息分区路由的算法,然后把指定的key都发送到同一个 Partition 里面。(如图)
接着指定一个消费者专门来消费某个分区的数据,这样就能保证消息的顺序消费了。
在这里插入图片描述
另外,有些设计方案里面,在消费端会采用异步线程的方式来消费数据来提高消息的处理效率,那这种情况下,因为每个线程的消息处理效率是不同的,所以即便是采用单个分区的存储和消费也可能会出现无序问题,针对这个问题的解决办法就是在消费者这边使用一个阻塞队列,把获取到的消息先保存到阻塞队列里面,然后异步线程从阻塞队列里面去获取消息来消费。

7. Kafka 消息队列怎么保证 exactlyOnce,怎么实现顺序消费?

当我们向某个Topic 发送消息的时候,在 Kafka 的Broker 上,会通过Partition 分区的机制来实现消息的物理存储。
一个Topic 可以有多个Partition,相当于把一个 Topic 里面的N 个消息数据进行分片存储。
消费端去消费消息的时候,会从指定的Partition 中去获取。
在同一个消费组中,一个消费者可以消费多个Partition 中的数据。但是消费者的数量只能小于或者等于Partition 分区数量。
在这里插入图片描述
理解了Kafka 的工作机制以后,再来理解一下exactlyOnce 的意思,在MQ 的消息投递的语义有三种:

  • At Most Once: 消息投递至多一次,可能会丢但不会出现重复。
  • At Least Once: 消息投递至少一次,可能会出现重复但不会丢。
  • Exactly Once: 消息投递正好一次,不会出现重复也不会丢。

准确来说,目前市面上的MQ 产品,基本上都没有提供Exactly Once 语义的实现。我们只能通过一些其他手段来达到 Exactly Once 的效果。也就是确保生产者只发送一次,消费端只接受一次

  • 生产者可以采用事物消息的方式,事务可以支持多分区的数据完整性,原子性。并且支持跨会话的exactly once 处理语义,即使 producer 宕机重启,依旧能保证数据只处理一次
    开启事务首先需要开启幂等性,即设置 enable.idempotence 为true。然后对producer消息发送做事务控制。
    如果出现导致生产者重试的错误,同样的消息,仍由同样的生产者发送多次,这个消息只被写到 Kafka broker 的日志中一次;
  • 虽然生产者能保证在 Kafka broker 上只记录唯一一条消息,但是由于网络延迟的存在,有可能会导致 Broker 在投递消息给消费者的时候,触发重试导致投递多次。
    所以消费端,可以采用幂等性的机制来避免重试带来的重复消费问题。
  • 其次,关于实现顺序消费问题。
    在Kafka 里面,每个Partition 分区的消息本身就是按照顺序存储的。
    所以只需要针对 Topic 设置一个Partition,这样就保证了所有消息都写入到这一个 Partition 中。
    而消费者这边只需要消费这个分区,就可以实现消息的顺序消费处理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面试题篇-13-Kafka相关面试题 的相关文章

  • 2022Java面试题大全(整理版)面试题附答案详解,最全面详细

    目录 JAVA八股文 Java基础 String 和StringBuffer和 StringBuilder的区别 sleep 区间wait 区间有什么区别 Object 中有哪些方法 其中clone 怎么实现一个对象的克隆 Java如何实现
  • 记录一次生产环境MySQL死锁以及解决思路

    一 背景 1 业务背景 这里因为涉及到公司的业务问题不进行深入讨论 下面换成通用的一些业务场景就是举例 2 技术背景 众所周知 所谓锁的产生本质上是想解决资源竞争问题 在MySQL的前提下 MySQL为了解决事务并发独写的问题 在进行ins
  • 深度学习大模型训练--分布式 deepspeed PipeLine Parallelism 源码解析

    deepspeed PipeLine Parallelism 源码解析 basic concept PipeDream abstract 1F1B 4 steps Code comprehension in deepspeed prepar
  • Hadoop 完全分布式运行实战

    Hadoop运行模式包括 本地模式 伪分布式模式以及完全分布式模式 Hadoop官方网站 Apache Hadoop 流程步骤 准备3台客户机 关闭防火墙 静态ip 主机名称 安装JDK 配置环境变量 安装Hadoop 配置环境变量 配置集
  • Dubbo远程传输协议详解

    前言 上次小编为大家带来了Dubbo调用及容错机制详解 不知道大家有没有去看小编最后留下的问题 欢迎对文章进行评论也希望大家和小编多多交流 今天接着为大家带来Dubbo的内容 传输协议 上次调用机制中并没有涉及Dubbo传输的协议 这次容小
  • 快速部署Ceph分布式高可用集群

    快速部署Ceph分布式高可用集群 Ceph简介 Ceph是一个PB EB级别的分布式存储系统 可以提供文件存储 对象存储 和块存储 它可靠性高 易扩展 管理简便 其中对象存储和块存储可以和其他云平台集成 一个Ceph集群中有Monitor节
  • MQ - KAFKA 高级篇

    kafak是一个分布式流处理平台 提供消息持久化 基于发布 订阅的方式的消息中间件 同时通过消费端配置相同的groupId支持点对点通信 适用场景 构造实时流数据管道 用于系统或应用之间可靠的消息传输 数据采集及处理 例如连接到一个数据库系
  • MQ - KAFKA 基础篇

    1 KAFKA的核心组件 API Producer API 它允许应用程序向一个或多个 topics 上发送消息记录 Consumer API 允许应用程序订阅一个或多个 topics 并处理为其生成的记录流 Streams API 它允许
  • RabbitMQ避免重复消费

    在Java中 可以使用消息队列来实现消息的异步处理 其中常用的消息队列有 RabbitMQ ActiveMQ Kafka 等 什么是幂等性 幂等性是指无论操作执行多少次 都是得到相同的结果 而不会产生其他副作用 在rabbitMQ中 什么是
  • 【ranger】CDP环境 更新 ranger 权限策略会发生低概率丢失权限策略的解决方法

    一 问题描述 我们的 kafka 服务在更新 添加 ranger 权限时 会有极低的概率导致 MM2 同步服务报错 报错内容 Not Authorized 但是查看 ranger 权限是赋予的 并且很早配置的权限策略也会报错 相关组件版本
  • Hadoop3.x完全分布式模式下slaveDataNode节点未启动调整

    目录 前言 一 问题重现 1 查询Hadoop版本 2 集群启动Hadoop 二 问题分析 三 Hadoop3 x的集群配置 1 停止Hadoop服务 2 配置workers 3 从节点检测 4 WebUI监控 总结 前言 在大数据的世界里
  • Kafka基础—3、Kafka 消费者API

    一 Kafka消费者API 1 消息消费 当我们谈论 Kafka 消费者 API 中的消息消费时 我们指的是消费者如何从 Kafka 主题中拉取消息 并对这些消息进行处理的过程 消费者是 Kafka 中的消息接收端 它从指定的主题中获取消息
  • 消息队列选型:Kafka 如何实现高性能?

    在分布式消息模块中 我将对消息队列中应用最广泛的 Kafka 和 RocketMQ 进行梳理 以便于你在应用中可以更好地进行消息队列选型 另外 这两款消息队列也是面试的高频考点 所以 本文我们就一起来看一下 Kafka 是如何实现高性能的
  • 消息队列选型:Kafka 如何实现高性能?

    在分布式消息模块中 我将对消息队列中应用最广泛的 Kafka 和 RocketMQ 进行梳理 以便于你在应用中可以更好地进行消息队列选型 另外 这两款消息队列也是面试的高频考点 所以 本文我们就一起来看一下 Kafka 是如何实现高性能的
  • 使用 Helm Chart 部署分布式 GreptimeDB

    GreptimeDB 作为云时代基础设施的时序数据库 从第一天开始就积极拥抱云原生技术 将数据库部署在 Kubernetes 上可以提供可伸缩性 自愈能力和简化的部署和管理 从而为应用程序提供了强大的弹性和可靠性 Helm 是一个用于管理
  • 华纳云:ServiceComb如何实现zipkin分布式调用链追踪

    Apache ServiceComb是一个开源的微服务框架 它提供了分布式系统开发所需的一系列工具和服务 在ServiceComb中 实现分布式调用链追踪可以通过整合Zipkin来实现 Zipkin是一个开源的分布式追踪系统 它可以帮助你跟
  • 阿里技术官亲笔力作:Kafka限量笔记,一本书助你掌握Kafka的精髓

    前言 分布式 堪称程序员江湖中的一把利器 无论面试还是职场 皆是不可或缺的技能 而Kafka 这款分布式发布订阅消息队列的璀璨明珠 其魅力之强大 无与伦比 对于Kafka的奥秘 我们仍需继续探索 要论对Kafka的熟悉程度 恐怕阿里的大佬们
  • 考虑极端天气线路脆弱性的配电网分布式电源配置优化模型【IEEE33节点】(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • Kafka速度之谜:高性能的幕后秘密大揭秘

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 kafka高性能的原因 Page Cache ZeroCopy 零拷贝 前言 Kafka的介绍 kafka是linkedIn开源的分布式消息系统 归给Ap
  • RabbitMQ环境配置

    文章目录 安装Erlang 安装RabbitMQ 安装Erlang 下载地址 http erlang org download otp win64 25 3 2 7 exe 安装RabbitMQ 下载地址 https www rabbitm

随机推荐

  • CSS animation动画使用详解

    目录 一 animation动画的使用步骤 第一步 定义动画 第二步 使用动画 二 animation的复合属性 三 animation的拆分属性 四 动画属性 一 animation动画的使用步骤 第一步 定义动画 changes为定义的
  • springboot实现复杂业务下的更新操作

    大家好 我是雄雄 欢迎关注微信公众号 雄雄的小课堂 前言 现在是2022年5月4日19 25 55 今天写了个这样的功能 某用户在一天内有多个训练项目 比如 晨跑 有氧训练 跳绳这三个项目 这三个训练项目都在数据库中有记录 每个项目都有开始
  • moment()获取当前时间的前几个小时、前几天、前几个月、前几年

    注意 项目中如果没有安装moment需要先安装引入或直接引入网页 可以参考moment官网 1 获取从当前时间开始的前一个小时是几时 整时 moment subtract 1 hours hour 2 获取当前日期的前一天日期是几日 日 m
  • Linux应用编程之多次打开同一文件进行读写操作与 O_APPEND 标志

    重复打开同一个文件 进行写操作 譬如一个进程中两次调用 open 函数打开同一个文件 分别得到两 个文件描述符 fd1 和 fd2 使用这两个文件描述符对文件进行写入操作 那么它们是分别写 各从各的位置 偏移量开始写 还是接续写 一个写完
  • 《Linux运维总结:Centos7.6之OpenSSH7.4升级版本至9.3》

    一 环境信息 操作系统 Centos7 6 1810 OpenSSH 7 4p1 OpenSSL 1 0 2k fips 如下图所示 注意 升级后由于加密算法的区别 低版本的SSH工具可能无法连接 建议改用Xshell7或SecureCRT
  • 【高级Java架构师系统学习】最新Java高级面试题汇

    性能调优 影响MySQLServer 性能的相关因素 商业需求对性能的影响 系统架构及实现对性能的影响 Query语句对系统性能的影响 Schema设计对系统的性能影响 硬件环境对系统性能的影响 MySQL 数据库锁定机制 MySQL锁定机
  • 当黑客就入门 ZzCMS8.1前台任意脚本上传漏洞复现

    一 环境选择 1 系统环境 Win server 2003 2 靶机IP 192 168 220 132 3 Web环境 Phpstudy2016 4 源码 ZzCMS8 1 lt 点击下载 gt 二 源码部署 1 将源码放入phpstud
  • 如何将typora照片导到csdn上

    解决typora 图片上传到csdn的问题 问题背景 今晚想把typora的笔记传到csdn 却发现照片一直发不过去 总是出现 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 的问题 后来查了一下怎么解决 需要先将导入到
  • 德勤《全球AI发展白皮书》出炉!八大新趋势,三个关键技术一文扫尽【附下载】...

  • json-lib系列包报错原因

    我的JDK是1 6 json lib换了好几个版本还是不行 jsonArray与list之间的转换始终进行不了 之前也用到jsonArray与String之间的转换报错 不得不改用org json jar那个包 今天再次遇到这个问题 我决心
  • Nessus安装与使用

    目录 前言 一 kali安装Nessus 1 访问Nessus官网 2 安装Nessus程序 3 启动Nessus 4 浏览器访问nessus的web网站 5 选择 Managed Scanner 选项 点击 Continue 6 选择 T
  • SPEC CPU简介和使用

    前言 SPEC CPU是一套行业标准的CPU密集型基准测试套件 SPEC设计了此套件 以使用实际用户应用程序开发的工作负载 在最广泛的实际硬件范围内提供计算密集型性能的比较度量 这些基准作为源代码提供 要求用户习惯使用编译器命令以及通过控制
  • Linux开启查看端口

    1 查看防火墙状态 systemctl status firewalld 下图是防火墙关闭状态 2 开启防火墙 systemctl start firewalld 开启端口 firewall cmd zone public add port
  • 教你如何保存有妖气漫画

    有妖气是中国唯一且最大的纯原创漫画网站 官方这么介绍的 是不是真的我也不知道 但是在有妖气中看到喜欢的漫画想要保存下来的时候就出现问题了 有妖气为了防盗版是禁止图片另存为的 如果想要保存漫画只能靠截图了 但是截图后的漫画就没有原版的那么清晰
  • Windows本机无法访问VMware虚拟机Ubuntu上部署的项目

    问题 本机无法访问虚拟机上部署的项目 原因 8080端口没有开放 本来以为防火墙关闭就不会有这个问题 解决方法 开放端口8080 执行命令如下 永久开放8080端口 root ubuntu sudo firewall cmd permane
  • spring boot学习(十四):整合shiro

    shiro和SpringSecurity一样的安全 主要是涉及到realm Spring Boot 的shiro整合
  • S3使用rest API进行签名文件上传出现403问题

    问题 在使用s3的rest api进行签名请求头文件上传的时候 代理服务器出现了403问题 原因 必须将指定的所有签名请求头 都带给aws的s3服务器才能正常返回200响应 如下为请求头信息 POST 86 1792 19 012 0100
  • 【Cocos2d-html5游戏引擎学习笔记(6)】自定义Cocos2d-html5加载资源Loading界面

    这一篇其实本该放在后面写的 只是今天正好把这个整出来了 所以为了防止后面忘记 就在这里先写了 在运行index html文件的时候 引擎首先会把资源进行加载 这是为了让游戏在运行时更为流畅 避免了在运行时加载资源 而出现卡顿现象 影响用户体
  • 自己搭建一个SSH框架

    自己搭建一个SSH框架 真累挺 来源 张成法的日志 1 实验环境准备 MyEclipse8 6 Tomcat6 0 20 MySQL5 1 数据库脚本程序CREATE TABLE user id int 11 NOT NULL auto i
  • 面试题篇-13-Kafka相关面试题

    文章目录 1 什么是消息队列 2 kafka 的零拷贝原理 3 Kafka 如何保证消息不丢失 3 1 Producer 端 3 2 Broker 端 3 3 Consumer 4 Kafka 怎么避免重复消费 5 什么是 ISR 为什么需