Apache Kafka 消息清理之道

Apache Kafka消息中间件-03 Kafka 工作机制深度解析:消息写入、消费语义与高可靠存储原理 Kafka采用分布式架构实现消息传递,其核心机制包括:1)生产者通过Broker Controller获取Topic分区Leader列表,将消息发送至对应Leader;2)Leader写入日志后同步至ISR(同步副本)中的Follower;3)采用高水位(HW)机制控制消息可见性,HW表示消费者可消费的最高偏移量。HW更新遵循最小值原则:Leader取自身LEO(日志末端位移)与所有Follower LEO的最小值,Follower则取Leader HW与自身 阅读详情

前言

消息的清理是 MQ 中间件的基本能力,可以避免 MQ 的存储占用空间无序增长。与其他消息产品不同,Apache Kafka(以下简称 Kafka) 中 topic 上的消息被消费后不会被马上清除,而是由 topic 级别的清理策略来控制。本文将简要介绍 Kafka 中的两种消息清理策略:deletion 和 compaction,探讨他们的应用场景、配置参数以及一些技术细节。

AutoMQ[1] 是与 Apache Kafka 100% 兼容的新一代云原生 Kafka,对 Kafkfa 的存储层进行了重新设计和实现,使得其可以构建在像S3这样的对象存储之上。 得益于 AutoMQ 对 Apache Kafka 的完全兼容,本文中提到的原理和参数对于 AutoMQ 也同样适用。

名词定义

  • 消息:Kafka 官方一般称为 event 或 record。一个 event 包含一个 key(可选)和一个 value(消息本体);

  • 消息 batch:Kafka 会将多个消息聚合为一个 batch。具体来说,client 以 batch 形式向服务端生产或消费消息,服务端也按照 batch 进行消息的存储;

  • topic partition: topic 的一个分区。Kafka 中一个 topic 会被划分为多个 topic partition,以支持消费端和服务端的负载均衡;

  • segment:Kafka 中消息在存储介质上的基本单位。一个 topic partition 会被划分为多个 segment。它也是消息清理的基本单位;

Deletion or Compaction


我们可以在 Kafka 中为 topic 配置“cleanup.policy”参数,以指定它的清理策略。可选项包括:

  • delete:默认策略,当 segment 的大小或者时间达到阈值后直接删除;

  • compact:基于 key 的压缩策略,绑定同一个 key 的多个消息将仅保留最新的那个消息,其他消息将被删除。Kafka 的内部 topic “__consumer_offsets” 就是 compact 策略。

  • delete + compact:混合策略,老的 segment 会因为大小或时间被删除,同时 topic partition 也会被 compact;

一般来说,如果你的业务关注的是 key 的终态 value(也就是 KV 之类的场景),例如记录用户每日的行走步数,或者账户的余额,那么 compact 比较适合[2]。此外,compact 策略下,业务的 key 最好是可枚举的少数值。key 取值过于分散将会导致 compaction 效果大打折扣,这种场景可以考虑采用 delete + compact 的策略。如果没有明显的 KV 特征,一般采用 delete 策略即可。

注:Kafka 支持修改 topic 的清理策略,无需重启。

清理涉及的线程

Kafka 中以下线程会执行清理逻辑:

  • Scheduler 线程:执行 “kafka-log-retention” 任务,定时检查纯 delete 策略的 topic 是否需要清理;

  • LogCleaner 持有的 N 个 CleanerThread:执行 log compaction,同时执行 “delete + compact”混合策略下相关 topic 的 deletion;

其中 LogCleaner 需要将 server 侧的“log.cleaner.enable”配置为 true 才会开启(从 0.9.0.1 版本开始默认即为 true)。

以下将分别讨论这两类清理动作的细节。

Scheduler 触发的清理

Scheduler 定期执行执行 “kafka-log-retention” 任务,在该任务中将基于时间或者大小触发相关 segment 的删除。

涉及参数

  • log.retention.hours:Kafka 中消息保留的时间,默认取值为 168,也就是保留一个星期。前文提到过,清理的基本粒度是 segment,因此,只有在 segment 中最新的消息都超过了保留时间时,整个 segment 才会被删除;类似的其他时间粒度的参数还有 log.retention.minutes、log.retention.ms;

  • log.retention.bytes:topic partition 中最多保留的消息大小,默认取值 -1,也就是不做大小限制;

  • log.retention.check.interval.ms:“kafka-log-retention” 任务的执行间隔,默认取值 300000,即 5 min;

清理流程

  1. 过滤纯 delete 策略的 topic partition;

  2. 调用 kafka.log.UnifiedLog#deleteOldSegments(),清理三类 segment:

    • deleteLogStartOffsetBreachedSegments:删除 baseOffset <= logStartOffset 的 segment;

    • deleteRetentionSizeBreachedSegments:基于大小删除多余的 segment;

    • deleteRetentionMsBreachedSegments:基于时间删除过期的 segment;

LogCleaner 触发的清理

LogCleaner 是为了支持 compaction 而引入的组件,由“log.cleaner.enable”控制开启。LogCleaner 持有多个 CleanerThread,每个线程相对独立,基于 key 清理过时的消息。

compaction 策略下消息也可以被“删除”。如果 key 最新的 value 为 null,则 server 侧会将其视为删除的“声明”,并将在墓碑过期(见后文)后彻底删除该 key。

关于 compaction,Kafka 可以提供如下保障[3]:

  1. 追尾读的 consumer 可以消费到所有生产者写入的消息,这些消息有着连续的 offset;

  2. 消息的顺序不会变更,compaction 只是移除部分消息;

  3. 消息的 offset 不会变化,offset 一旦产生就是持久化的;

  4. 从头开始消费的 consumer 至少可以消费到终态的 value;

最后一条代表两个含义:

  • 最新的 value 一定会保存(除非是 null 值);

  • 有可能消费到 key 对应的早期的 value,原因可能是还没达到 compaction 的条件,也可能是相关消息带有墓碑标记(见后文)暂未删除;

涉及参数

除了上文的“log.cleaner.enable”,较为重要的配置还有:

  • log.cleaner.min.compaction.lag.ms:参与 compaction 的消息需要满足的最小生存时间,可以避免较新的消息参与 compaction。默认值 0;

  • log.cleaner.max.compaction.lag.ms:触发 compaction 满足的生存时间阈值,主要为了让不活跃的 topic partition 也能参与到 compaction。默认值 9223372036854775807,即不开启本特性;

  • log.cleaner.min.cleanable.ratio:topic partition 的 dirty 比例,超过阈值才有可能参与 compaction。更低的值意味着更高的清理频率。默认值 0.5;

  • delete.retention.ms:带有墓碑标记的消息的“死缓”时间。默认值 86400000,即一天;

  • log.cleaner.threads:LogCleaner 持有的 CleanerThread 数目。默认值为 1;

  • log.cleaner.backoff.ms:CleanerThread 没有扫描到可 compaction 的 topic partition 后的静默时间。默认值 15000(15s);

清理流程

在开始之前,先介绍几个概念:

  • active segment: 当前活跃的 segment,也是最新的 segment,可以接受新消息的写入;

  • cleaned segments:此前 compaction 的产物,这些 segments 中的所有消息,不存在重复的 key;

  • dirty segments:cleaned segments 之后,active segment 之前的 segment。这些 segment 没有经历过 compaction。

大体可以分为:

  1. 待 compact 的 topic partition 的筛选;

  2. topic partition 的 compaction;

  3. 配置了“delete + compact”混合策略的 topic partition 执行 deletion;

Topic Partition 的筛选

本阶段,将从 server 端筛选出最“脏”的 topic partition。具体来说,Kafka 会过滤出以下 topic partition 作为候选 者:

  • 存在 dirty 消息,但是不活跃的 topic partition,避免它们长期不被清理;

  • 活跃的,并超过了清理阈值的 topic partition;

大体逻辑如下:

其中:

  • inProgress lock: 用于线程之间的锁定,防止一个 topic partition 被多个 CleanerThread 选中,同时防止 topic partition 在清理策略变更时被 Scheduler 线程和 CleanerThread 同时选中;

  • partition uncleanable: 表示线程清理过程中发生过预期外的异常(非 ThreadShutdownException 或 ControlThrowable),将这些 partition “拉黑”;

  • firstDirtyOffset: 一般从 checkpoint 文件中读取,值为上次清理的最后位点 + 1;

  • firstUncleanalbeDirtyOffset: 不可清理的起始位点,取值为 min{log.lastStableOffset, log.activeSegment.baseOffset, 不满足 minCompactionLagMs 的 segment.baseOffset};

  • needCompactionNow:取值为 (now - min(dirty segment 的 FirstBatchTimestamp)) > maxCompactionLagMs。为 true 往往意味着这个 topic partition 太久没有被命中了;

  • 取 max 值: 实际上就是取 dirty ratio 最高的 topic partition,一个 CleanerThread 一次仅对一个 topic partition 做 compaction;

  • dirty ratio = ([firstDirtyOffset, firstUncleanalbeDirtyOffset) 之间消息的大小)/([startOffset, firstUncleanalbeDirtyOffset) 之间消息的大小);

Partition 的 compaction

本阶段将构建 offsetMap,其中 key 为消息的 key,value 为绑定该 key 的最新消息的 offset。并根据该 map,分批构建新 segment。大致流程如下:

首先,在 [firstDirtyOffset, firstUncleanalbeDirtyOffset) 区间内构建 offsetMap。注意,此 map 不包含任何控制信息以及中断事务的消息。为了避免区间过长导致 map 无限膨胀,offsetMap 大小是受限的(所有 CleanerThread 的 offsetMap 总共的内存占用不可超过 128 MB)。因此,最终 offsetMap 的 latestOffset < firstUncleanalbeDirtyOffset。

接着,在[0, offsetMap.latestOffset] 区间内,将所有待清理的 segment 进行分组,每个 group 中的总的 logSize、indexSize、timeIndexSize 不可以超过相应的 topic config。预期每个 group 对应一个清理后的 segemnt。

之后,基于 offsetMap,为每个 group 中的 segment 中所有的 batch 进行过滤,写入到新 segment 中,不同 batch 中 record 的删除规则为:

  • ControlBatch:空 batch 或者空事务对应的 ControlBatch(事务数据在此前已经删除完毕),且墓碑已超时;

  • dataBatch:满足以下条件中的一个:

    • 中断事务中的消息;

    • record.offset() < offsetMap.get(key) 或者 (value 为 null,且墓碑超时);

上面提到的墓碑是一种两阶段删除手段,是 Kafka 为了让下游的消费者能够有机会完整地获取所有消息引入的一种机制。也就是说,如果消费者必须在“delete.retention.ms”时间内从头消费到最新位点,才可以完整“回放”所有消息。从效果上来说,墓碑相当于给事务 marker 和 null value 消息判了“死缓”。

需要注意的是,对于 magic 值 >= 2 的新版本 batch,墓碑时间会在第一次 compaction 时打入 batch。对于 magic 值 < 2 的老版本 batch,是依据 segment 的最后修改时间来近似推断是否墓碑超时的。

最后,过滤完毕的 record 写入新 segment。新 segment 上线,老 segment 被删除。将 offsetMap.latestOffset + 1 存入 clean offset checkpoint 文件。

整体来看,compaction 后,log startOffset 会小幅前进,同时原有的消息会进行一定“压缩”:

Segment deletion

与 Scheduler 触发的删除类似,配置了“delete + compact”混合策略后的 topic partition 也会删除旧的 segment,只是删除由 CleanerThread 完成。删除逻辑不再赘述。

总结

本文介绍了 Kafka 中消息的两种清理策略。首先从整体上介绍了 Kafka 中的两种消息清理策略,讨论了业务 topic 清理策略的选择问题。接着简要介绍了清理涉及的线程。最后,分别讨论了 Scheduler 和 LogCleaner 触发的清理的参数和技术细节。对于 delete 策略,会基于 partition size 或者消息过期时间进行 segement 的直接删除;对于 compact 策略,会构建 offset map,并基于该 map 保留同一个 key 对应的最新 value。

参考文献:

[1] AutoMQ: https://www.automq.com

[2] Kafka Topic Configuration: Log Compaction: https://www.conduktor.io/kafka/kafka-topic-configuration-log-compaction/

[3] Compaction guarantees https://docs.confluent.io/kafka/design/log_compaction.html#compaction-guarantees

解析大数据领域 Kafka 的日志清理策略 维度Delete 策略Compact 策略核心逻辑过期即删(时间/大小阈值)保留每个 key 的最新版本适用数据类型日志型(流水数据)状态型(key-value 数据)key 要求无要求必须有唯一 key性能开销低(仅删除文件)高(读-去重-写)常见配置典型场景用户访问日志、订单支付日志用户资料、设备状态、配置信息Kafka 的日志清理策略,本质是**“数据价值”与“存储成本”的权衡**——没有“最好的策略”,只有“最适合业务的策略”。 阅读详情

相关推荐

消息队列之Kafka详解

消息队列之Kafka详解1 什么是Kafka3. 基本概念4. 分区存储4.1. 分区存储数据4.2. Kafka清理过期数据有哪些方法5. Kafka安全机制5.1. 了解Kafka安全机制5.2. 配置ACL5.3. Kafka启用ACL模式6. Kafka连接器6.1. 了解连接器使用场景6.2. 特性和优势6.3. 操作Kafka连接器6.4. 开发一个简易Kafka连接器插件7. Kafka监控系统 --- Kafka Eagle7.1. Kafka Eagle 简介7.2. Kafka Eagl

廷赫斯的博客 708

kafka删除topic消息的三种方式

kafka删除topic消息的三种方式 方法一:快速配置删除法(确保topic数据不要了) 1.kafka启动之前,在server.properties配置delete.topic.enable=true 2.执行命令bin/kafka-topics.sh --delete --topic test --zookeeper zk:2181或者使用kafka-manager集群管理工具删除 注意:如果kafka启动之前没有配置delete.topic.enable=true,topic只会标记为marked

爱折腾的小土豆的博客 1万+

Apache Kafka 是什么?

Apache Kafka是一个开源的分布式事件流平台,具有高吞吐、持久化、可扩展等特点。其核心概念包括主题、分区、副本等,架构围绕生产、存储、消费三个环节设计,支持高吞吐、低延迟的消息处理。Kafka广泛应用于日志聚合、流处理、消息系统等场景,相比其他消息队列具有更高的性能和持久化能力。生态组件包括Kafka Connect、Kafka Streams等,提供丰富的功能扩展。通过命令行工具可快速操作主题、生产者和消费者。Kafka已成为大数据和实时计算领域的核心基础设施。

guigenyi的专栏 1158

kafka删除topic消息的四种方式

方法一:快速配置删除法(简单粗暴,如果这个主题有程序还在消费都,此时KAFKA就game over) 1.kafka启动之前,在server.properties配置delete.topic.enable=true 2.执行命令bin/kafka-topics.sh --delete --topic test --zookeeper zk:2181或者使用kafka-manager集群管理工具删除 注意:如果kafka启动之前没有配置delete.topic.enable=true,topic只会标记

新技术革命 3万+

Kafka数据清理指南

在本文中,我们将介绍如何使用Kafka进行数据清理。当我们在Kafka集群中处理大量的数据时,及时清理过期、无效或不再需要的数据是非常重要的。首先,我们需要了解Kafka中的数据保留策略。Kafka的数据保留策略决定了消息在主题中保留的时间。默认情况下,Kafka会根据时间来保留数据,也可以根据数据大小进行保留。根据您的需求和数据保留策略,选择适合您的场景的方法进行数据清理。这将将特定分区保留的时间设置为1秒,使消息在下一次清理时被删除。当主题中的数据大小超过指定的阈值时,旧的消息将被删除。

WdzDevops的博客 4486

kafka中数据清理

Kafka的消息存储在磁盘中,为了控制磁盘占用空间,Kafka需要不断地对过去的一些消息进行清理工作。Kafka的每个分区都有很多的日志文件,这样也是为了方便进行日志的清理。在Kafka中,提供两种日志清理方式:  日志删除(Log Deletion):按照指定的策略直接删除不符合条件的日志。  日志压缩(Log Compaction):按照消息的key进行整合,有相同key的但有不同value值,只保留最后一个版本。 在Kafka的broker或topic配置中: 配置项 配置值 说明 log.c

科学的N次方 655

Kafka topic消息清理几种方式

执行命令bin/kafka-topics.sh --delete --topic test --zookeeper zk:2181或者使用kafka-manage集群管理工具删除。参考链接:https://cloud.tencent.com/developer/article/1590094。,只需要修改server.properties配置文件的delete.topic.enable为true就可以了。kafka启动之前,在server.properties配置。

jiayu的博客 8843

Apache Kafka各版本特性与应用

在现代信息技术的浪潮中,Apache Kafka已经成为了处理大规模实时数据流的事实标准之一。Kafka是由LinkedIn开源的一个分布式流处理平台,其设计初衷是为了解决公司内部海量数据的实时处理问题。随着时间的推移,Kafka已经成为大数据生态中不可或缺的一环。Kafka最初由LinkedIn公司开发,并于2011年开源。它本质上是一个分布式的消息系统,支持高吞吐量、可持久化的消息队列服务。

weixin_35414260的博客 1305

Kafka疑难杂症全解析:从消息清理到消费异常处理

Overridetry {// 返回 null 会被消费者跳过// 消费者配置问题类型推荐方案关键工具/代码删除特定消息Log Compaction 或重建 Topic消费格式异常自定义反序列化或跳过消息数据源头治理生产者增加校验逻辑Jackson 序列化、Schema Registry不可变日志是 Kafka 的基石,优先通过重建数据流或逻辑过滤解决问题。生产环境慎用,可能破坏数据一致性。推荐使用 Schema Registry(如 Avro)避免格式冲突。

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 1万+

小程序HTTPS证书配置踩坑记:为什么Android访问失败而iOS正常?

本文深入剖析了小程序开发中常见的跨平台网络问题:Android访问HTTPS接口失败而iOS正常。核心原因在于服务器(如Nginx)HTTPS证书链配置不完整,Android系统对此校验严格,而iOS相对宽松。文章提供了从问题诊断、使用在线工具检测到修复Nginx证书链配置的完整解决方案,并总结了HTTPS部署的最佳实践,帮助开发者从根本上避免此类“玄学”故障。

weixin_29207149的博客 394

Cartographer参数调优指南:如何用Lua配置解决建图漂移问题

本文深入解析Cartographer SLAM系统的Lua参数调优方法,针对建图漂移问题提供完整解决方案。从运动滤波、扫描匹配到多传感器融合,详细讲解关键参数配置技巧,并给出仓库物流和服务机器人等典型场景的优化方案,帮助开发者实现精准建图。

vulkan6gpu的博客 116

Apache Kafka 配置

用于在日志段(segment)滚动时添加抖动时间,以减少所有broker在同一时间滚动segment的情况,从而平滑磁盘I/O。:这通常不是一个具体的配置项,而是指Kafka的生产者(Producer)客户端,用于发送消息到Kafka集群。:定义了日志段的最大生命周期(毫秒),超过此时间后,无论日志段的大小如何,都将被删除或压缩。:在删除文件之前等待的时间(毫秒),以确保被删除的文件不会被消费者或其他进程再次访问。:定义了允许的最大时间戳差异(毫秒),用于检测并拒绝时间戳异常的消息。

weixin_36873225的博客 1057

LSTM 怎么进行二维数据的输入呢

尽管LSTM并不天然地适用于处理图像、视频等二维数据,但通过时间序列化、卷积特征提取和双向LSTM等方法,我们可以将二维数据转化为适合LSTM输入的形式,从而利用LSTM的强大记忆能力和长期依赖学习能力对二维数据进行建模。未来的研究方向可以考虑将LSTM与其他模型结合,例如将LSTM与卷积神经网络(Convolutional Neural Network, CNN)结合,利用CNN提取图像的空间特征,然后利用LSTM学习时间序列的长期依赖;

xiamu_CDA的博客 1037

Kafka 如何处理消息丢失?

通过合理配置 Kafka 的副本、确认机制、消费者偏移量管理等,能够有效避免消息丢失问题。Kafka 提供了强大的数据复制和持久化能力,使其在分布式系统中能够实现高可用和可靠的消息传递。对于生产环境中的 Kafka 集群,务必根据实际情况设置合理的副本数、日志保留策略以及消息确认机制,确保系统的稳定性与消息的可靠性。希望通过这篇文章,能够帮助开发者理解 Kafka 消息丢失的原因以及如何配置 Kafka 来避免这一问题。对于任何分布式系统,确保消息的可靠传递和持久化是基础,也是最为重要的设计目标之一。

一碗黄焖鸡三碗米饭的博客 882

Qt c++ llama.cpp 运行 LLaMA-3-8B 中文对话机器人(多模态输入)

助手:

寒寒豆豆软件公司的博客 219

python读取并可视化npy格式的深度图文件以及将其保存为jpg图片的方法

  npy文件是无法直接打开的,它里面包含的是一个矩阵格式的数据,可以用于存储图像。为了对其进行可视化,需要将其转换为图像。这里需要用到numpy包以及matplotlib包,没有的话就pip install一下吧。现进入包含有npy文件的目录(我的该目录下有一个名为0000.npy的文件),然后打开一个终端,执行python进入pythn命令行模式,依次输入如下代码即可: import numpy as np import matplotlib.pyplot as plt depthmap = np.lo

zeeq的博客 5万+

深入理解Apache Kafka

Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。发布-订阅消息系统:支持生产者-消费者模式的消息传递高吞吐量:即使是非常普通的硬件也能支持每秒数十万条消息持久化存储:消息可持久化到磁盘,并支持数据备份分布式架构:易于水平扩展,支持集群部署实时处理:支持实时流式数据处理Apache Kafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持。

hi星尘的博客 2058

【数据集】全球首个10米分辨率精细分类土地覆盖数据集GLC_FCS10

【数据集】全球首个10米分辨率精细分类土地覆盖数据集GLC_FCS10

WW、forever的博客 1567

终极指南:Apache Kafka日志清理线程状态检查与优化实战

Apache Kafka作为高性能分布式消息系统,其日志清理机制是保障集群稳定性和磁盘空间利用率的核心组件。本文将全面解析Kafka日志清理线程的工作原理,提供实用的状态检查方法和优化技巧,帮助你轻松解决日志管理难题。 ## Kafka日志清理线程工作原理 Kafka的日志清理线程(LogCleaner)负责删除过期或重复消息,主要针对采用"compact"保留策略的主题。其核心工作流程包括:

gitblog_00084的博客 1018

开发Qt上位机获取阿里云IOT设备数据(开发上位机对接阿里云IOT平台)

使用Qt框架开发一款上位机软件,调用阿里云物联网平台的API接口,获取设备最新上传的实时数据,并在Qt设计的软件界面上展示处理。同时,还支持绘制曲线图表展示数据,并具备定时刷新功能。

2143

[AI8051U入门第一步]环境安装和按键控制流水灯

本文介绍了AI8051U单片机的开发环境搭建及GPIO应用。主要内容包括:1)通过ISP软件完成Keil开发环境配置;2)AI8051U特性介绍,包括32位8051内核、浮点运算单元及丰富外设;3)GPIO输入输出模式解析,并附流水灯控制代码;4)提供完整的系统初始化、延时函数及LED控制代码实现。文章配套资源包含完整工程代码,适用于智能硬件及物联网开发。

sinat_58149788的博客 671

Apache Kafka

摘要:Apache Kafka是Apache基金会的分布式流处理平台,专为高吞吐、低延迟的大规模数据传输设计。其核心特性包括分区并行处理、副本高可用机制、持久化存储和灵活的消息留存策略,适用于日志聚合、实时数据管道等场景。Kafka通过生产者-消费者模型实现系统解耦,支持百万级消息吞吐,与RabbitMQ形成互补,是大数据生态的关键组件。

Cby121353的博客 991

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Kafka 消息中间件

提供路由并保证消息的传送;如果发送消息时接收者不可用,消息对列会保留消息,直到可以成功地传递它为止,当然,消息队列保存消息也是有期限的。 二消息中间件特点1)解耦:允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。2)冗余:消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。许多消息队列所采用的"插入-获取-删除"范式中,在把一个消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直到你使用

hudeyong926的专栏 4793

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Kafka消息存储机制和组织架构简述

Apache Kafka是一款高性能、分布式的流处理平台,广泛应用于日志收集、实时分析和数据流处理等领域。其核心之一便是高效的消息存储机制和灵活的组织架构。本文将简述Kafka的消息存储机制和组织架构,以帮助读者更好地理解Kafka的工作原理和设计理念。

My_wife_QBL的博客 842

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Kafka 在什么情况下会出现消息丢失?

Apache Kafka 作为一种高性能的分布式消息队列系统,通常被用于构建高可靠性的数据管道和实时处理系统。然而,在某些特定情况下,Kafka 也可能会出现消息丢失的问题。了解这些情况并采取相应的措施,可以帮助我们更好地保障数据的可靠性。本文将详细探讨 Kafka 在哪些情况下可能会出现消息丢失,以及如何预防这些问题。

My_wife_QBL的博客 972
上一篇: 携手AWS,零成本在EKS上体验AutoMQ企业版
下一篇: AWS 弹性伸缩特性介绍
AutoMQ
博客等级 码龄3年 1206粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值