Kafka运维宝典 (三)- Kafka 最大连接数超出限制问题、连接超时问题、消费者消费时间超过限制问题详细介绍

Kafka运维宝典 (三)

文章目录

  • Kafka运维宝典 (三)
  • 一、Kafka Broker 配置中的最大连接数超出限制问题
    • 1. 错误原因
    • 2. 相关 Kafka 配置参数
      • 2.1 `connections.max`
      • 2.2 `max.connections.per.ip`
      • 2.3 `num.network.threads`
      • 2.4 `connections.max.idle.ms`
    • 3. 错误表现和影响
      • 3.1 连接数超限的影响
    • 4. 解决方案
      • 4.1 增加最大连接数限制
      • 4.2 增加每个 IP 地址的最大连接数
      • 4.3 增加 Kafka Broker 网络线程数
      • 4.4 优化连接池管理
      • 4.5 缩短空闲连接的最大时长
      • 4.6 分布式部署和负载均衡
    • 5. 具体实例
  • 二、Kafka 连接超时问题
    • 1. 连接超时的常见原因
      • 1.1 Kafka Broker 网络延迟或不可用
      • 1.2 客户端与 Broker 之间的连接池问题
      • 1.3 客户端配置不当
      • 1.4 Broker 负载过高或线程不足
      • 1.5 DNS 或代理问题
    • 2. Kafka 连接超时相关配置参数
      • 2.1 `connections.max.idle.ms`
      • 2.2 `request.timeout.ms`
      • 2.3 `connection.timeout.ms`
      • 2.4 `session.timeout.ms`
      • 2.5 `metadata.fetch.timeout.ms`
      • 2.6 `retry.backoff.ms`
    • 3. 常见错误和表现
    • 4. 解决方案
      • 4.1 增加连接超时和请求超时
      • 4.2 增加 Kafka Broker 网络线程数
      • 4.3 检查网络连接
      • 4.4 优化客户端重试策略
      • 4.5 增加 Kafka Broker 资源
      • 4.6 检查网络质量
      • 4.7 使用负载均衡
    • 5. 具体实例
  • 三、Kafka 消费者消费时间超过限制问题
    • 1. 问题现象
      • 1.1 消费超时错误
      • 1.2 消费者组出现重平衡
      • 1.3 消息堆积(Backlog)
      • 1.4 消费者心跳超时
    • 2. 排查方向
      • 2.1 消费者处理时间过长
      • 2.2 Kafka 配置不当
      • 2.3 消费者并发性不足
      • 2.4 Kafka Broker 响应缓慢
      • 2.5 消息堆积与分区不均衡
    • 3. 相关配置参数
      • 3.1 `max.poll.interval.ms`
      • 3.2 `session.timeout.ms`
      • 3.3 `max.poll.records`
      • 3.4 `fetch.max.wait.ms`
      • 3.5 `fetch.min.bytes`
    • 4. 解决方案
      • 4.1 增加消费时间限制
      • 4.2 优化消费者处理速度
      • 4.3 调整 `max.poll.records`
      • 4.4 增加消费者并发性
      • 4.5 调整 `session.timeout.ms`
      • 4.6 确保 Kafka Broker 性能
      • 4.7 分区均衡
    • 5. 具体实例

一、Kafka Broker 配置中的最大连接数超出限制问题

Kafka 在高负载情况下可能会面临 最大连接数限制 达到上限的问题,导致新的客户端连接请求被拒绝。Kafka Broker 允许配置一定的最大连接数,当连接数达到配置的上限时,新的连接会被拒绝。这种情况通常发生在大量客户端(生产者、消费者)连接 Kafka Broker,或者当 Kafka Broker 配置不当时。

1. 错误原因

Kafka Broker 有多个配置参数来限制连接数,这些参数确保 Kafka 集群不会因为连接数过多而导致资源耗尽或性能问题。当客户端(生产者、消费者等)请求与 Broker 建立连接时,如果当前连接数已达到 Broker 的最大连接数限制,Kafka 将拒绝该请求,通常表现为如下错误信息:

[Broker id: 1] Error accepting connection (max connections exceeded)

或者:

Rejected connection from x.x.x.x, address already has the configured maximum of 256 connections

2. 相关 Kafka 配置参数

以下是与 Kafka Broker 连接数限制相关的主要配置参数:

2.1 connections.max

这个配置项用于控制 Kafka Broker 上可以接受的最大连接数。如果 Broker 达到了这个连接数限制,新的客户端连接请求会被拒绝。

connections.max=5000  # 配置允许最大 5000 个并发连接

2.2 max.connections.per.ip

此参数控制来自同一 IP 地址的最大连接数。如果一个 IP 地址的连接数达到配置的上限,来自该 IP 地址的其他连接请求将被拒绝。

max.connections.per.ip=256  # 限制每个 IP 地址最多 256 个连接

2.3 num.network.threads

这个参数定义了 Kafka Broker 处理网络请求的线程数。网络线程不足可能导致连接处理变慢,从而导致客户端连接请求被拒绝。

num.network.threads=8  # 设置为 8,增加网络线程数

2.4 connections.max.idle.ms

该参数定义了连接在无活动时的最大空闲时间。如果连接超过这个时间未被使用,Kafka Broker 会关闭该连接并释放资源。

connections.max.idle.ms=600000  # 10分钟后关闭空闲连接

3. 错误表现和影响

当 Kafka Broker 达到最大连接数限制时,客户端连接会受到拒绝。表现为以下错误信息:

  • 生产者或消费者客户端连接 Kafka 时出现连接失败,错误信息中通常会包含“连接被拒绝”或“最大连接数超限”等字样。
  • Kafka Broker 日志会记录类似的错误:
    [Broker id: 1] Error accepting connection (max connections exceeded)
    
  • 连接拒绝后,客户端可能会抛出以下异常:
    • 生产者异常
      [Producer clientId=producer-1] Connection to node -1 could not be established
      
    • 消费者异常
      [Consumer clientId=consumer-1] Unable to connect to Kafka server
      

3.1 连接数超限的影响

  • 拒绝新连接:当连接数超限时,Kafka 无法接受新连接,生产者或消费者无法向集群发送或接收消息。
  • 性能下降:如果 Kafka Broker 由于连接数过多而无法接受新的连接,可能导致生产者消息积压、消费者无法消费消息,整体性能下降。
  • 资源消耗过大:每个连接都会占用一定的系统资源,如内存和 CPU。如果连接数过多,Kafka Broker 可能会耗尽系统资源,甚至出现宕机或性能下降。

4. 解决方案

4.1 增加最大连接数限制

如果 Kafka Broker 经常出现连接数超限问题,可以通过修改 connections.max 配置项来增加允许的最大连接数。例如:

connections.max=10000  # 增加最大连接数限制

修改配置后,重新启动 Kafka Broker 以使配置生效。

4.2 增加每个 IP 地址的最大连接数

如果问题是由于单个 IP 地址的连接数过多,可以考虑增加 max.connections.per.ip 配置项。通过提高每个 IP 地址的最大连接数限制,可以防止某个客户端过多的连接导致拒绝其他连接。例如:

max.connections.per.ip=512  # 每个 IP 地址最多允许 512 个连接

这也可以帮助缓解来自某个 IP 地址的高并发连接问题。

4.3 增加 Kafka Broker 网络线程数

如果 Kafka Broker 处理连接的网络线程数较少,可以增加 num.network.threads 配置项。这将允许 Kafka Broker 处理更多并发的网络连接请求。例如:

num.network.threads=16  # 配置为 16 个网络线程

更多的网络线程可以提高 Kafka Broker 对连接的处理能力,减少因为线程不足导致的连接请求超时。

4.4 优化连接池管理

  • 生产者端优化:确保生产者客户端连接池的管理得当,不要频繁建立和关闭连接。可以通过设置合适的 acks 参数,减少连接的创建和关闭次数。
  • 消费者端优化:消费者客户端也应避免频繁重连,并且合理配置消费策略,确保连接得到最大利用。

4.5 缩短空闲连接的最大时长

如果连接数超限的原因是由于空闲连接未及时关闭,可以通过缩短 connections.max.idle.ms 参数值,确保空闲连接被快速关闭并释放资源。例如:

connections.max.idle.ms=300000  # 设置空闲连接最大保持时间为 5 分钟

4.6 分布式部署和负载均衡

  • 增加 Kafka Broker 节点:如果单个 Broker 的连接数过多,可以增加 Kafka 集群中的 Broker 节点,分担负载。
  • 使用负载均衡:可以使用负载均衡器(如 Nginx 或 HAProxy)将客户端请求均衡地分配到多个 Kafka Broker 上,避免单个 Broker 负载过高。

5. 具体实例

假设你有一个 Kafka 集群,某个 Broker 频繁出现以下错误:

[Broker id: 1] Error accepting connection (max connections exceeded)

解决步骤:

  1. 检查 connections.max 配置,增加最大连接数限制:

    connections.max=10000  # 将最大连接数增加到 10000
    

    然后,重新启动 Kafka Broker。

  2. 检查 max.connections.per.ip 配置,确保单个 IP 地址的最大连接数足够大:

    max.connections.per.ip=512  # 每个 IP 地址最大连接数设置为 512
    
  3. 增加 num.network.threads 配置,提高 Kafka Broker 的网络线程数:

    num.network.threads=16  # 配置为 16 个网络线程
    
  4. 缩短空闲连接的最大时长,通过调整 connections.max.idle.ms 来释放不活跃连接:

    connections.max.idle.ms=300000  # 设置为 5 分钟
    
  5. 监控连接数:使用 Prometheus 或 JMX 定期监控 Kafka 的连接数指标,发现连接数过多的现象及时调整配置。

通过这些步骤,可以有效解决 Kafka Broker 由于连接数超限导致拒绝新连接的问题,从而提高 Kafka 集群的稳定性和性能。

二、Kafka 连接超时问题

Kafka 连接超时是指客户端(如生产者、消费者)与 Kafka Broker 之间的连接在规定的时间内未能成功建立或维持,导致请求失败。连接超时问题通常发生在 Kafka 集群负载过高、网络不稳定或配置不当时。解决此问题涉及多个方面,包括网络配置、Kafka 配置以及客户端设置。

1. 连接超时的常见原因

1.1 Kafka Broker 网络延迟或不可用

  • Kafka Broker 可能由于网络延迟、硬件故障或负载过重,导致客户端无法在规定时间内建立连接。
  • 网络中断或不稳定会导致客户端连接超时。

1.2 客户端与 Broker 之间的连接池问题

  • 客户端可能维护着多个与 Kafka Broker 的连接池,如果这些连接池资源被耗尽,客户端尝试新连接时会超时。
  • 例如,如果生产者尝试与多个 Kafka Broker 建立连接,但这些连接的初始化时间过长,可能会导致连接超时。

1.3 客户端配置不当

  • 客户端配置的超时值设置过短,导致在连接过程中出现超时错误。
  • request.timeout.msconnection.timeout.ms 等配置可能设置得过低,造成连接超时。

1.4 Broker 负载过高或线程不足

  • Kafka Broker 本身的负载过高,可能会导致请求被阻塞或延迟,进而导致连接超时。
  • Kafka Broker 上的网络线程数配置不足,处理连接请求的能力有限,容易发生超时问题。

1.5 DNS 或代理问题

  • Kafka 客户端可能无法解析 Kafka Broker 的主机名或 IP 地址。或者代理设置不当,导致客户端与 Broker 的连接失败。

2. Kafka 连接超时相关配置参数

以下是 Kafka 中与连接超时相关的主要配置项:

2.1 connections.max.idle.ms

该参数设置连接空闲的最大时间。如果连接在这个时间内没有任何活动,Kafka Broker 会关闭该连接。

connections.max.idle.ms=600000  # 10分钟后关闭空闲连接

2.2 request.timeout.ms

此参数控制请求的最大等待时间。如果请求超时(没有收到 Kafka Broker 的响应),客户端会抛出超时异常。该参数通常用于生产者和消费者请求。

request.timeout.ms=30000  # 请求超时设置为 30 秒

2.3 connection.timeout.ms

客户端连接 Kafka Broker 的超时时间。如果 Kafka Broker 在指定时间内没有响应,客户端会抛出超时异常。

connection.timeout.ms=10000  # 设置连接超时为 10 秒

2.4 session.timeout.ms

Kafka 消费者的会话超时。消费者会话超时通常用于检测消费者是否仍然活跃。如果消费者在规定时间内没有发送心跳,Broker 会认为消费者已经失效并重新平衡分区。

session.timeout.ms=10000  # 设置消费者会话超时为 10 秒

2.5 metadata.fetch.timeout.ms

此参数指定从 Kafka Broker 获取元数据(如主题、分区信息等)的超时时间。元数据获取超时也可能导致连接超时的错误。

metadata.fetch.timeout.ms=60000  # 元数据获取超时设置为 60 秒

2.6 retry.backoff.ms

如果 Kafka 客户端连接超时或失败,客户端会进行重试。此参数控制重试之间的等待时间。

retry.backoff.ms=1000  # 设置重试之间的间隔时间为 1 秒

3. 常见错误和表现

当 Kafka 连接超时时,常见的错误信息包括:

  • 生产者连接超时错误
    [Producer clientId=producer-1] Connection to node -1 could not be established. Broker may not be available.
    
  • 消费者连接超时错误
    [Consumer clientId=consumer-1] Unable to connect to Kafka server
    
  • 网络延迟或超时
    [Consumer clientId=consumer-1] Timed out waiting for server response
    
  • 元数据获取超时
    [Producer clientId=producer-1] Timed out waiting for metadata for topic
    

这些错误通常表示客户端未能在预定时间内成功与 Broker 建立连接或从 Broker 获取元数据。

4. 解决方案

4.1 增加连接超时和请求超时

如果连接或请求经常超时,尝试增加连接超时 (connection.timeout.ms) 和请求超时 (request.timeout.ms) 配置值。例如:

connection.timeout.ms=30000  # 增加连接超时为 30 秒
request.timeout.ms=60000     # 增加请求超时为 60 秒

这样可以在网络延迟较大的情况下,给 Kafka 客户端更多的时间来建立连接和处理请求。

4.2 增加 Kafka Broker 网络线程数

如果 Kafka Broker 的网络线程数不足,可能会导致连接请求超时。通过增加 num.network.threads 参数值,可以提升 Kafka Broker 的并发处理能力。例如:

num.network.threads=8  # 增加 Kafka Broker 网络线程数为 8

4.3 检查网络连接

  • 确保 Kafka Broker 的网络连接正常,防火墙或安全组规则不阻止客户端的连接请求。
  • 检查 Kafka Broker 的 DNS 是否可解析,确保客户端能够正确找到 Kafka Broker。

4.4 优化客户端重试策略

如果客户端频繁遭遇连接超时,可以通过配置 retry.backoff.ms 来减少重试次数或增加重试间隔,从而减轻 Broker 的负担。例如:

retry.backoff.ms=2000  # 增加重试间隔为 2 秒

4.5 增加 Kafka Broker 资源

如果 Kafka Broker 负载过高,可能需要增加资源(如 CPU、内存)来处理更多的连接请求。确保 Kafka Broker 的硬件资源足够支撑当前负载。

4.6 检查网络质量

  • 如果 Kafka Broker 部署在云环境或远程数据中心,网络质量不佳可能导致连接超时。确保网络带宽和延迟足够支持 Kafka 的连接需求。
  • 使用 pingtraceroute 工具检查与 Kafka Broker 的网络延迟。

4.7 使用负载均衡

如果 Kafka 集群的负载过高,可以考虑使用负载均衡(如 Nginx、HAProxy)来均衡客户端的连接请求,避免单个 Broker 的连接数过高。

5. 具体实例

假设你的 Kafka 集群频繁遇到连接超时问题,生产者和消费者在连接时出现以下错误:

[Producer clientId=producer-1] Connection to node -1 could not be established. Broker may not be available.

解决步骤:

  1. 检查 connection.timeout.msrequest.timeout.ms 配置,增加超时限制:

    connection.timeout.ms=30000  # 设置连接超时为 30 秒
    request.timeout.ms=60000     # 设置请求超时为 60 秒
    
  2. 增加 Kafka Broker 的网络线程数,提升并发处理能力:

    num.network.threads=8  # 增加网络线程数为 8
    
  3. 检查 Kafka Broker 和客户端的网络连接,确保没有防火墙或 DNS 配置问题。

  4. 调整重试间隔,减少频繁重试的负担:

    retry.backoff.ms=2000  # 设置重试间隔为 2 秒
    
  5. 扩展 Kafka 集群,增加更多的 Broker 节点,分散负载,避免单个 Broker 成为瓶颈。

三、Kafka 消费者消费时间超过限制问题

Kafka 消费者消费时间超过限制问题通常发生在消费者处理消息的时间过长,导致消费请求超时或消费者无法及时处理消息,进而影响整个消费者组的消费效率。这种问题如果不及时解决,可能会导致消息积压、消费者重平衡等一系列问题,从而影响系统的整体性能。

1. 问题现象

当 Kafka 消费者的消费时间超过设定的限制时,通常会出现以下现象:

1.1 消费超时错误

消费者在消费消息时,未能在规定时间内处理完当前消息,导致超时错误。

[Consumer clientId=consumer-1] Timed out waiting for server response

或者:

[Consumer clientId=consumer-1] Consumer timeout while fetching messages

1.2 消费者组出现重平衡

当一个消费者长时间无法提交消息偏移量,其他消费者会重新分配其消费的分区,导致消费者组的重平衡。

[Consumer clientId=consumer-1] Group coordinator found: ... Rebalancing consumer group

1.3 消息堆积(Backlog)

由于消费者未能及时处理消息,Kafka topic 中的消息开始堆积,造成队列积压。

Kafka topic 'my_topic' has a backlog of 10,000 messages.

1.4 消费者心跳超时

消费者未能在规定时间内向 Kafka Broker 发送心跳,导致 Kafka 假定该消费者已失效,进而触发分区重新分配。

[Consumer clientId=consumer-1] Consumer group 'my_consumer_group' has failed to heartbeat in time

2. 排查方向

2.1 消费者处理时间过长

如果消费者在处理每条消息时执行了复杂的逻辑(如数据库操作、调用外部 API 或计算密集型操作),可能导致消费者处理速度慢,超过了设定的消费时间限制。

2.2 Kafka 配置不当

Kafka 消费者的一些配置参数如果设置不当,也可能导致超时问题:

  • max.poll.interval.ms:消费者在每次调用 poll() 后,最大允许的时间间隔。如果消费者在此时间内没有调用 poll(),则会触发消费者重平衡。
  • session.timeout.ms:消费者与 Kafka Broker 的心跳超时,影响消费者在 Kafka 中的存活时间。
  • max.poll.records:消费者每次从 Broker 获取的最大消息数。如果设置过高,可能导致消费者处理时间过长。

2.3 消费者并发性不足

如果消费者的处理能力不足(如单线程消费、CPU 或内存资源不足等),则无法及时消费大量消息。

2.4 Kafka Broker 响应缓慢

当 Kafka Broker 负载过高或网络延迟较大时,消费者从 Broker 获取消息的时间可能会被延长,从而导致超时。

2.5 消息堆积与分区不均衡

如果某些分区的消息过多,消费者可能会花费更长时间来处理这些分区中的消息,导致消费时间延长。

3. 相关配置参数

以下是 Kafka 消费者和相关配置中,影响消费时间限制的重要配置项:

3.1 max.poll.interval.ms

此参数指定消费者每次从 Broker 拉取消息后,最大允许的消费时间间隔。如果超过此时间,消费者会被认为“死掉”,触发分区的重新分配。

max.poll.interval.ms=300000  # 5 分钟

3.2 session.timeout.ms

消费者与 Kafka Broker 的心跳超时。如果在指定时间内未能发送心跳,Kafka 会认为消费者失效,触发分区重平衡。

session.timeout.ms=10000  # 设置为 10 秒

3.3 max.poll.records

控制消费者每次调用 poll() 时最多拉取多少条消息。如果拉取的消息过多,可能会导致处理时间过长,进而超时。

max.poll.records=500  # 每次最多拉取 500 条消息

3.4 fetch.max.wait.ms

控制消费者从 Broker 拉取消息时,等待服务器响应的最大时间。如果设置得过低,可能会导致消费者频繁超时。

fetch.max.wait.ms=500  # 设置为 500 毫秒

3.5 fetch.min.bytes

该配置控制每次拉取消息时,Broker 至少返回的消息字节数。如果设置为较高的值,可能会导致消费者等待更多消息,从而超时。

fetch.min.bytes=1  # 设置为 1 字节,确保每次拉取尽可能多的消息

4. 解决方案

4.1 增加消费时间限制

如果消费者处理每条消息需要较长时间,可以通过增加 max.poll.interval.ms 来允许消费者有更长的时间来处理消息。

max.poll.interval.ms=600000  # 增加为 10 分钟

此设置允许消费者在每次拉取消息后有更多时间来完成消息处理,避免因超时被认为是失效消费者。

4.2 优化消费者处理速度

优化消费者处理逻辑,减少每条消息的处理时间:

  • 并行处理:使用多线程或异步处理方式,避免单线程消费过慢。
  • 批量处理:如果消息处理逻辑允许,可以批量处理消息,减少每条消息的处理时间。
  • 数据库操作优化:如果消息处理涉及数据库操作,确保数据库操作高效,如使用批量插入等优化策略。

4.3 调整 max.poll.records

如果消费者一次拉取的消息数量太多,可能会导致消费时间过长。减少每次拉取的消息数量,可以缩短每次 poll() 操作的时间。

max.poll.records=100  # 每次最多拉取 100 条消息

4.4 增加消费者并发性

使用多个消费者实例来增加并发性,减少单个消费者的负载,从而缩短每个消费者的处理时间。

4.5 调整 session.timeout.ms

适当增加 session.timeout.ms 配置项,以减少因心跳超时导致的消费者重平衡。通常可以设置为较大的值,确保消费者即使在短暂的处理延迟下也能正常工作。

session.timeout.ms=15000  # 设置为 15 秒

4.6 确保 Kafka Broker 性能

确保 Kafka Broker 的性能足够支撑客户端的需求,检查 Broker 的 CPU、内存、磁盘等资源是否足够。如果发现 Kafka Broker 的负载过高,可以考虑增加 Kafka Broker 节点或优化 Broker 配置。

4.7 分区均衡

确保 Kafka topic 的分区数量适当,并且分区均衡。某些分区的消息积压可能会导致个别消费者的处理时间延长,影响整个消费者组的消费速度。增加分区数或重新分配分区可以有效缓解该问题。

5. 具体实例

假设你有一个 Kafka 消费者,在消费消息时出现了超时错误:

[Consumer clientId=consumer-1] Timed out waiting for server response

解决步骤:

  1. 增加 max.poll.interval.ms 配置
    由于消费者的处理逻辑较为复杂,增加 max.poll.interval.ms 配置,允许消费者更长的时间来处理每条消息。

    max.poll.interval.ms=600000  # 增加为 10 分钟
    
  2. 优化消费者处理速度

    • 使用多线程异步处理消息,避免长时间占用单个线程。
    • 如果涉及数据库操作,考虑批量处理数据插入,提升效率。
  3. 减少每次拉取的消息数
    修改 max.poll.records,确保每次 poll() 时拉取的消息数量适中。

    max.poll.records=100  # 每次最多拉取 100 条消息
    
  4. 确保 Kafka Broker 资源足够
    检查 Kafka Broker 的 CPU、内存、磁盘等资源是否充足,必要时增加更多 Broker 节点,缓解负载压力。

  5. 增加 session.timeout.ms 配置
    为了避免因心跳超时导致的消费者重平衡,增加 session.timeout.ms 设置。

    session.timeout.ms=15000  # 设置为 15 秒
    

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

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

相关文章

模板泛化类如何卸载释放内存

CustomWidget::~CustomWidget() {for (size_t i 0; i < buttonManager.registerItem.size(); i) {delete buttonManager.registerItem(exitButton);} } 以上该怎么写删除对象操作&#xff0c;类如下&#xff1a;template <typename T> class GenericManager { public…

在Linux系统上安装.NET

测试系统&#xff1a;openKylin(开放麒麟) 1.确定系统和架构信息&#xff1a; 打开终端&#xff08;Ctrl Alt T&#xff09;&#xff0c;输入cat /etc/os-release查看系统版本相关信息。 输入uname -m查看系统架构。确保你的系统和架构符合.NET 的要求&#xff0c;如果架构…

28. 【.NET 8 实战--孢子记账--从单体到微服务】--简易报表--报表定时器与报表数据修正

这篇文章是《.NET 8 实战–孢子记账–从单体到微服务》系列专栏的《单体应用》专栏的最后一片和开发有关的文章。在这片文章中我们一起来实现一个数据统计的功能&#xff1a;报表数据汇总。这个功能为用户查看月度、年度、季度报表提供数据支持。 一、需求 数据统计方面&…

深入探索C++17的std::any:类型擦除与泛型编程的利器

文章目录 基本概念构建方式构造函数直接赋值std::make_anystd::in_place_type 访问值值转换引用转换指针转换 修改器emplaceresetswap 观察器has_valuetype 使用场景动态类型的API设计类型安全的容器简化类型擦除实现 性能考虑动态内存分配类型转换和异常处理 总结 在C17的标准…

物管系统赋能智慧物业管理提升服务质量与工作效率的新风潮

内容概要 在当今的物业管理领域&#xff0c;物管系统的崛起为智慧物业管理带来了新的机遇和挑战。这些先进的系统能够有效整合各类信息&#xff0c;促进数字化管理&#xff0c;从而提升服务质量和工作效率。通过物管系统&#xff0c;物业管理者可以实时查看和分析各种数据&…

代码随想录算法训练营第三十八天-动态规划-完全背包-322. 零钱兑换

太难了 但听了前面再听这道题感觉递推公式也不是不难理解 动规五部曲 dp[j]代表装满容量为j&#xff08;也就是目标值&#xff09;的背包最少物品数量递推公式&#xff1a;dp[j] std::min(dp[j], dp[j - coins[i]] 1)当使用coins[i]这张纸币时&#xff0c;要向前找到容量为…

分组表格antd+ react +ts

import React from "react"; import { Table, Tag } from "antd"; import styles from "./index.less"; import GroupTag from "../Tag"; const GroupTable () > {const columns [{title: "姓名",dataIndex: "nam…

【JAVA实战】如何使用 Apache POI 在 Java 中写入 Excel 文件

大家好&#xff01;&#x1f31f; 在这篇文章中&#xff0c;我们将带你深入学习如何使用 Apache POI 在 Java 中编写 Excel 文件的技巧&#xff01;&#x1f4ca;&#x1f4da; 如果你是 Java 开发者&#xff0c;或者正在探索如何处理 Excel 文件的数据&#xff0c;那么这篇文章…

使用Avalonia UI实现DataGrid

1.Avalonia中的DataGrid的使用 DataGrid 是客户端 UI 中一个非常重要的控件。在 Avalonia 中&#xff0c;DataGrid 是一个独立的包 Avalonia.Controls.DataGrid&#xff0c;因此需要单独通过 NuGet 安装。接下来&#xff0c;将介绍如何安装和使用 DataGrid 控件。 2.安装 Dat…

Spring Bean实例化过程

Spring Bean 的生命周期管理是 Spring IOC 的核心功能之一。Bean 生命周期从实例化、依赖注入、初始化、销毁等各个阶段的源码分析,有助于深入理解 Spring 容器的工作原理,特别是在复杂应用中的应用和定制化。 本文将详细分析 Spring Bean 的生命周期,并通过源码分析每个阶…

C#分页思路:双列表数据组合返回设计思路

一、应用场景 需要分页查询&#xff08;并非全表查载入物理内存再筛选&#xff09;&#xff0c;返回列表1和列表2叠加的数据时 二、实现方式 列表1必查&#xff0c;列表2根据列表1的查询结果决定列表2的分页查询参数 三、示意图及其实现代码 1.示意图 黄色代表list1的数据&a…

【Linux】磁盘

没有被打开的文件 文件在磁盘中的存储 认识磁盘 磁盘的存储构成 磁盘的效率 与磁头运动频率有关。 磁盘的逻辑结构 把一面展开成线性。 通过扇区的下标编号可以推算出在磁盘的位置。 磁盘的寄存器 控制寄存器&#xff1a;负责告诉磁盘是读还是写。 数据寄存器&#xff1a;给…

waitpid使用

waitpid 是 Unix/Linux 系统中用于等待子进程状态变化的系统调用。它允许父进程挂起执行&#xff0c;直到指定的子进程终止或者发生了其他指定的状态变化。 waitpid 的语法 pid_t waitpid(pid_t pid, int *status, int options); pid: 要等待的子进程的进程 ID&#xff0c;特殊…

网站结构优化:加速搜索引擎收录的关键

本文来自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/9.html 网站结构优化对于加速搜索引擎收录至关重要。以下是一些关键策略&#xff0c;旨在通过优化网站结构来提高搜索引擎的抓取效率和收录速度&#xff1a; 一、合理规划网站架构 采用扁…

第13章 深入volatile关键字(Java高并发编程详解:多线程与系统设计)

1.并发编程的三个重要特性 并发编程有三个至关重要的特性&#xff0c;分别是原子性、有序性和可见性 1.1 原子性 所谓原子性是指在一次的操作或者多次操作中&#xff0c;要么所有的操作全部都得到了执行并 且不会受到任何因素的干扰而中断&#xff0c;要么所有的操作都不执行…

记录 | Docker的windows版安装

目录 前言一、1.1 打开“启用或关闭Windows功能”1.2 安装“WSL”方式1&#xff1a;命令行下载方式2&#xff1a;离线包下载 二、Docker Desktop更新时间 前言 参考文章&#xff1a;Windows Subsystem for Linux——解决WSL更新速度慢的方案 参考视频&#xff1a;一个视频解决D…

PySide(PyQT)进行SQLite数据库编辑和前端展示的基本操作

以SQLite数据库为例&#xff0c;学习数据库的基本操作&#xff0c;使用QSql模块查询、编辑数据并在前端展示。 SQLite数据库的基础知识&#xff1a; https://blog.csdn.net/xulibo5828/category_12785993.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId1278…

【算法学习笔记】36:中国剩余定理(Chinese Remainder Theorem)求解线性同余方程组

中国剩余定理 假定存在 m 1 . . m k m_1..m_k m1​..mk​两两互质&#xff0c;中国剩余定理旨在求解这样的线性同余方程组中的 x x x&#xff1a; x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) . . . x ≡ a k ( m o d m k ) x \equiv a_1~(mod~m_1) \\ x \equiv a_2~(mod…

stack 和 queue容器的介绍和使用

1.stack的介绍 1.1stack容器的介绍 stack容器的基本特征和功能我们在数据结构篇就已经详细介绍了&#xff0c;还不了解的uu&#xff0c; 可以移步去看这篇博客哟&#xff1a; 数据结构-栈数据结构-队列 简单回顾一下&#xff0c;重要的概念其实就是后进先出&#xff0c;栈在…

JUC--ConcurrentHashMap底层原理

ConcurrentHashMap底层原理 ConcurrentHashMapJDK1.7底层结构线程安全底层具体实现 JDK1.8底层结构线程安全底层具体实现 总结JDK 1.7 和 JDK 1.8实现有什么不同&#xff1f;ConcurrentHashMap 中的 CAS 应用 ConcurrentHashMap ConcurrentHashMap 是一种线程安全的高效Map集合…