
【MQ-Apache Kafka】
文章平均质量分 83
kafka的搭建与使用
kafka副本机制及选举原理
kafka架构设计原理
kafka最佳性能优化
小小工匠
show me the code ,change the world
展开
-
Kafka - 消息队列的丢失、重复与积压_从生产到消费的完整解决方案
引入 MQ 消息中间件最直接的目的是:做系统解耦合流量控制,追其根源还是为了解决互联网系统的高可用和高性能问题。系统解耦:用 MQ 消息队列,可以隔离系统上下游环境变化带来的不稳定因素,比如XX服务的系统需求无论如何变化,YY服务不用做任何改变,即使当XX服务出现故障,YY流程也可以将京豆服务降级,实现XX服务和YY服务的解耦,做到了系统的高可用。流量控制:遇到秒杀等流量突增的场景,通过 MQ 还可以实现流量的“削峰填谷”的作用,可以根据下游的处理能力自动调节流量。原创 2025-03-18 07:30:00 · 1384 阅读 · 0 评论 -
Kafka - 跨机房双活方案
就是对各个机房的主题人为地添加一些标识,例如后缀,图中后缀是DC1和DC2,这样不同机房间的消息就可以同步不同的主题了,避免了消息的循环复制问题。另一种方式是对同一主题的双向同步。由于MM1只能同步相同主题的消息,因此当多机房采取单向同步实现双活时,就需要考虑新建两个主题,例如机房1写入主题1,然后通过MM1将主题1的消息同步到机房2的主题1,机房2写入的消息从主题2再同步到机房1的主题2,这样两个机房的生产者只要往各自主题写入并同时订阅两个主题的消息,就可以消费所有的消息,从而实现机房的双活。原创 2025-03-07 05:15:00 · 1047 阅读 · 0 评论 -
Kafka - 高吞吐量的七项核心设计解析
在消息中间件领域,Apache Kafka以卓越的吞吐性能著称。虽然RocketMQ在某些场景下展现出更高的吞吐能力,但其架构设计仍深受Kafka启发。接下来我们将从存储设计、网络优化、内存管理等维度,深入剖析Kafka实现百万级TPS的七大关键技术,揭示其高性能背后的设计哲学。批量压缩批量发送批量解压顺序写入磁盘页缓存加速日志分段存储稀疏索引+跳表Reactor网络模型零拷贝传输零拷贝传输生产者优化消费者批量拉取一、顺序磁盘I/O1.1 存储架构设计Kafka采用「分区+顺序追加」的写入模式,每个原创 2025-03-06 19:32:39 · 2222 阅读 · 0 评论 -
Kafka - 分区机制及副本机制
自定义策略主要是依据业务属性和特点来实现的,以下是几种比较常见的自定义策略。按消息键保存策略,键可以依据业务属性进行划分,这样就可以保障同样的业务被分配到相同的分区,由于Kafka支持单分区消息有序,因此这种策略对于同一业务可以很好地实现消息的有序性需求。按区域分区策略。原创 2025-03-06 05:15:00 · 2080 阅读 · 0 评论 -
Kafka - 消息乱序问题的常见解决方案和实现
在分布式系统中,消息队列(MQ)作为实现系统解耦和异步通信的重要工具,广泛应用于各种业务场景。然而,消息消费时出现的乱序问题,常常会对业务逻辑的正确执行和系统稳定性产生不良影响。接下来我们将详细探讨MQ消息乱序问题的根源,并提供一系列在实际应用中可行的解决方案,包括顺序消息、前置检测、状态机等方式首先定义订单状态的枚举类型OrderStateORDER_CREATED, // 订单已创建ORDER_PAID, // 订单已支付ORDER_SHIPPED, // 订单已发货。原创 2024-12-11 22:39:38 · 3577 阅读 · 0 评论 -
Kafka - 启用安全通信和认证机制_SSL + SASL
Kafka的SASL-SSL配置主要用于保护集群的网络传输安全,确保客户端与服务器端的通信通过加密和认证机制来保证数据的安全性和访问控制.。Kafka支持多种安全协议,最常见的包括SSL(加密传输)、SASL(认证)和ACL(访问控制列表)。SSL(Secure Sockets Layer):为数据传输提供加密,防止传输过程中的数据泄露和篡改。SASL(Simple Authentication and Security Layer):提供身份认证机制。原创 2024-11-10 07:45:00 · 4651 阅读 · 0 评论 -
Kafka - 监控工具 Kafka Eagle:实时洞察Kafka集群的利器
Kafka Eagle是一款开源的、高度可定制的监控和告警工具,专门为Apache Kafka设计。它为Kafka集群提供了丰富的实时监控和管理功能,以确保高可用性、性能和数据完整性。Kafka Eagle的核心目标是帮助用户更好地理解和优化他们的Kafka环境,减少潜在问题的风险。原创 2023-10-31 23:45:00 · 10439 阅读 · 0 评论 -
Kafka - 3.x 消费者 生产经验不完全指北
这使得消费者能够以事务的方式处理消息,包括从Kafka中读取消息、处理消息和提交消息的offset。之前,Kafka的消费者通常使用手动提交offset的方式,但这种方式可能导致消息被重复消费或漏消费,特别是在处理消息和提交offset之间发生错误的情况下。:一些Kafka客户端库提供了高性能的消费者实现,如Apache Kafka的Java客户端,它具有较低的延迟和更高的吞吐量。:选择适当的分区分配策略,以确保分区分配在不同的消费者之间均匀分布,以充分利用多个消费者实例的并行性。原创 2023-10-31 22:15:00 · 8713 阅读 · 0 评论 -
Kafka - 3.x 分区分配策略及再平衡不完全指北
Sticky策略的主要优点是减少了分区再分配的频率,减轻了系统的不稳定性,降低了重新平衡的成本。RoundRobin分区分配策略是Kafka中一种常用的消费者分区分配策略,它的原理非常简单:每个消费者依次轮流分配Topic的分区,以确保分区分配是均匀的。即在执行一次新的分配之前,考虑上一次分配的结果,尽量少的调整分配的变动,可以节省大量的开销。需要注意的是,Kafka的分配策略和Consumer Group的协调机制使得数据的消费和负载均衡变得相对容易管理,同时允许水平扩展,以适应不同规模的工作负载。原创 2023-10-31 06:45:00 · 8059 阅读 · 0 评论 -
Kafka - 3.x Kafka消费者不完全指北
每个实例代表一个消费者组中的一个成员。:初始化消费者组前,需要创建一个消费者配置对象,其中包括了一些重要的属性,例如Kafka集群的地址、消费者组的ID、自动提交偏移量等。:首先,你需要配置消费者的属性,包括Kafka集群的地址、消费者组、主题名称、序列化/反序列化器、自动偏移提交等。:如果有消费者实例加入或离开消费者组,或者分区的分配发生变化,Kafka会自动进行重新平衡,以确保消息均匀分配。:如果消费者实例加入或退出消费者组,或者分区的分配发生变化,消费者组会自动进行重新平衡,以确保消息均匀分配。原创 2023-10-30 20:15:00 · 7717 阅读 · 0 评论 -
Kafka - 3.x 文件存储不完全指北
Kafka的producer生产数据,要写入到log文件中,写的过程是一直追加到文件末端,为顺序写。总之,Kafka的日志清理策略是一个关键组成部分,用于管理消息日志的大小和维护磁盘空间。根据业务需求,可以选择不同的保留策略和清理策略,以满足数据保留、性能和可用性方面的要求。Kafka的日志清理策略是为了管理磁盘上的数据,确保系统的性能和可用性。日志清理策略通常与消息日志的保留策略相关。总之,Kafka的数据存储机制通过主题、分区和段的组织,支持高吞吐量的消息流处理,使其成为一种强大的数据流平台。原创 2023-10-28 11:15:00 · 7849 阅读 · 0 评论 -
Kafka - 3.x 副本不完全指北
follower发生故障后会被临时踢出ISR,待该follower恢复后,follower会读取本地磁盘记录的上次的HW,并将log文件高于HW的部分截取掉(HW之前每个节点都有,故安全),从HW开始向leader进行同步。当分区的领导者(Leader)失败时,会触发新的领导者选举过程,确保分区的可用性。eader发生故障之后,会从ISR中选出一个新的leader,之后,为保证多个副本之间的数据一致性,其余的follower会先将各自的log文件高于HW的部分截掉,然后从新的leader同步数据。原创 2023-10-28 08:00:00 · 8254 阅读 · 0 评论 -
Kafka - 3.x 图解Broker总体工作流程
图解Broker工作流程原创 2023-10-28 06:15:00 · 8354 阅读 · 0 评论 -
Kafka - 3.x Producer 生产者最佳实践
对于某些不太重要的数据,对数据的可靠性要求不是很高,能够容忍数据的少量丢失,所以没必要等ISR中的follower全部接收成功。所以Kafka为用户提供了三种可靠性级别,用户根据对可靠性和延迟的要求进行权衡,选择以下的配置。,参数值默认为true,设置为false就关闭了。在prudocer的配置对象中,添加参数。原创 2023-10-27 21:45:00 · 7709 阅读 · 0 评论 -
Kafka - 3.x Kafka 生产者分区技巧全面指北
除了使用 Kafka 提供的默认分区器进行分区分配,还可以使用自定义的分区器,只需同DefaultPartitioner 一样实现 Partitioner 接口即可。默认的分区器在 key 为 null 时不会选择非可用的分区, 我们可以通过自定义的分区器 来打破这一限制,具体的实现可以参考下面的示例代码,实现步骤:① 定义类,实现Partitioner接口② 重写partition()方法import org/*** @author 小工匠} else {原创 2023-10-27 07:15:00 · 8121 阅读 · 0 评论 -
Kafka - TimeoutException: Expiring 1 record(s) for art-0:120001 ms has passed since batch creation
不关闭防火墙,但是建议本机防火墙开放特定端口,可以使用如下命令 (使用root账户)我并没有大改配置,具体的配置可参考。结果都是关闭的 (建议开放特定端口)可以看消费者的控制台程序,输出正常。要解决这个问题,修改如上配置即可。这种情况,肯定要先看网络问题嘛。如下的配置并没有修改。原创 2023-10-26 20:45:00 · 13906 阅读 · 2 评论 -
Kafka - 异步/同步发送API
该方法有两个参数分别是RecordMetadata(元数据信息)和Exception(异常信息)。回调函数callback()会在producer收到ack时调用,为异步调用。需求:创建Kafka生产者,采用异步的方式发送到Kafka broker。同步发送的意思就是,一条消息发送之后,会阻塞当前线程,直至返回ack。注意:消息发送失败会自动重试,不需要我们在回调函数中手动重试。忽略我这个offset …原创 2023-10-26 22:45:00 · 9361 阅读 · 0 评论 -
Kafka - 图解生产者消息发送流程
发送消息到RecordAccumulator:主线程将创建的消息发送到一个双端队列(deque)叫做RecordAccumulator。管理消息的状态:RecordAccumulator跟踪每条消息的发送状态,以确保消息被成功发送到Kafka broker。从RecordAccumulator拉取消息:Sender线程定期轮询(poll)RecordAccumulator,检查是否有新消息需要发送。负责消息批量化:RecordAccumulator也有助于消息的批量发送,以减少网络开销和提高性能。原创 2023-10-26 20:45:00 · 7958 阅读 · 0 评论 -
Kafka - 3.x Kafka命令行操作
这些参数是Kafka管理工具的一部分,用于在Kafka集群上执行各种管理任务,例如创建、删除、配置和查看主题。根据具体的任务,您可以使用这些参数中的一个或多个来执行相应的操作。:指定要连接的Kafka Broker的主机名和端口号,用于建立连接到Kafka集群的初始引导服务器。需要指定要修改的主题以及新的配置。:用于更新系统默认的Kafka主题配置,可以设置不同的主题级别的配置参数。:查看指定主题的详细描述,包括主题的配置、分区信息、副本分配等。:指定操作的主题的名称,这是执行各种操作的目标主题。原创 2023-10-26 06:45:00 · 8192 阅读 · 0 评论 -
Kafak - 单机/集群快速安装指北(3.x版本)
因为Zookeeper集群当中记录着Kafka集群相关信息,Zookeeper集群一旦先停止,Kafka集群就没有办法再获取停止进程的信息,只能手动杀死Kafka进程了。分别在hadoop103和hadoop104主机上修改配置文件server.properties中broker.id=103、broker.id=104。注意:停止Kafka集群时,一定要等Kafka所有节点进程全部停止后再停止Zookeeper集群。注:broker.id不得重复。原创 2023-10-26 04:30:00 · 8574 阅读 · 0 评论 -
Kafka - java.lang.VerifyError: Uninitialized object exists on backward branch 193
我这里的版本虽然看起来对,但是JAVA_HOME不对。无论运行哪个版本的 JRE,都需要 JAVA_HOME 指向正确的 JDK 版本。这玩意儿一看就是JDK版本的问题。原创 2023-10-26 05:30:00 · 8126 阅读 · 2 评论 -
Kafka - 深入了解Kafka基础架构:Kafka的基本概念
- 1)Producer :消息生产者,就是向kafka broker发消息的客户端- 2)Consumer :消息消费者,向kafka broker获取消息的客户端- 3)Consumer Group (CG):消费者组,由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据,一个broker可以有多个不同的topic,一个topic下的一个分区只能被一个消费者组内的一个消费者所消费;消费者组之间互不影响。消费者组是逻辑上的一个订阅者原创 2023-10-25 22:15:00 · 8725 阅读 · 0 评论 -
Kafka - 消息队列的两种模式
这种模式适用于一对多的通信,其中消息的发送者不需要关心谁会接收消息,通常用于事件处理、日志记录和实时通知等场景。消息队列主要分为两种模式:点对点模式(一个生产者对口一个消费者)和发布/订阅模式(一对多)。这种模式适用于一对一的通信,其中生产者和消费者之间有直接的关联,通常用于任务分发和处理。在实际的消息队列系统中,可以根据需求选择合适的模式来实现不同类型的消息传递。这两种模式有各自的优势和适用性,选择哪种模式取决于应用程序的需求。消息队列确实可以根据消息传递的模式分为。原创 2023-10-25 20:15:00 · 9357 阅读 · 0 评论 -
MQ - 闲聊MQ一二事儿 (Kafka、RocketMQ 、Pulsar )
ookeeper 是 cp 强一致架构的一种,其内部使用 zab 算法,进行信息同步和容灾,在信息量较小的情况下,性能较好,当信息交互变多,因为同步带来的性能损耗加大,性能和吞吐量降低。kafka 的整体性能收到了 topic 数量的限制,这和底层的存储有密不可分的关系,我们上面讲过,当消息来的时候,底层数据使用追加写入的方式,顺序写盘,使得整体的写性能大大提高,但这并不能代表所有情况,当我们 topic 数量从几个变成上千个的时候,情况就有所不同了。所以,针对不同场景选择合适的产品是非常关键的。原创 2023-07-24 23:29:14 · 13211 阅读 · 0 评论 -
Kafka - Primie Number of Partitions Issue & Consumer Group Rebalance
在 Kafka 中,Consumer Group Rebalance 是指在 Consumer Group 中添加或删除消费者时,重新分配 Topic 的分区的过程。Consumer Group Rebalance 由 Consumer Group Coordinator(负责管理 Consumer Group State 的 Broker)触发,并使用 Consumer Group Assignment Strategy(确定如何将分区分配给 Consumer Group 中的消费者)重新平衡分区分配。原创 2023-07-20 10:57:06 · 12238 阅读 · 0 评论 -
Kafka - AR 、ISR、OSR,以及HW和LEO之间的关系
如果ISR太小,那么当主副本故障时,选举新的主副本可能会导致数据丢失或延迟;如果ISR太大,那么同步数据的成本会变得很高,影响分区的性能。当消费者从分区中读取消息时,它会记录当前已经读取到的偏移量,并将该偏移量作为下一次读取的起始位置。如果消费者读取到的偏移量小于HW,那么它只能读取到已经被所有副本复制的消息;如果消费者读取到的偏移量大于HW,那么它可能会读取到未被所有副本复制的消息。OSR的存在不会影响分区的可用性和性能,但是如果OSR过大,那么可能会占用过多的磁盘空间和网络带宽。原创 2023-07-19 19:45:00 · 13309 阅读 · 0 评论 -
Kafka - 分区中各种偏移量的说明
LEO是Log End Offset的缩写,它标识当前日志文件中下一条待写入消息的offset,上图中offset为9的位置即为当前日志文件的LEO,LEO的大小相当于当前日志分区中最后一条消息的offset值加1。如上图,它代表一个日志文件,这个日志文件中有 9 条消息,第一条消息的 offset(LogStartOffset)为0,最后一条消息的offset为8,offset为9的消息用虚线框表示,代表下一条待写入的消息。如果消费者读取到的偏移量大于HW,那么它可能会读取到未被所有副本复制的消息。原创 2023-07-18 22:15:00 · 12724 阅读 · 0 评论 -
Kakfa - 多副本架构
提高数据可靠性:多副本架构可以将同一个主题的数据同时存储在多个 Broker 上,当某个 Broker 发生故障时,系统可以从其他 Broker 上获取数据,从而保证数据的可靠性。为了避免这种情况,需要对数据进行复制和同步。提高系统可用性:多副本架构可以保证系统在某个 Broker 发生故障时仍然可以继续提供服务,从而提高系统的可用性。会增加存储成本:多副本架构需要将同一个主题的数据同时存储在多个 Broker 上,会增加存储成本。会增加系统复杂度:多副本架构需要对数据进行复制和同步,会增加系统的复杂度。原创 2023-07-18 20:15:00 · 14250 阅读 · 0 评论 -
Apache Kafka - 流式处理
Kafka被广泛认为是一种强大的消息总线,可以可靠地传递事件流,是流式处理系统的理想数据来源。流式处理系统通常是指一种处理实时数据流的计算系统,能够对数据进行实时的处理和分析,并根据需要进行相应的响应和操作。与传统的批处理系统不同,流式处理系统能够在数据到达时立即进行处理,这使得它们特别适合需要实时响应的应用程序,例如实时监控和警报、实时推荐、实时广告投放等。Kafka的设计使其成为流式处理系统的理想数据源,因为它具有高吞吐量、低延迟和可靠性,并且能够轻松地扩展以处理大量数据。原创 2023-06-03 23:33:26 · 18686 阅读 · 1 评论 -
Apache Kafka - 跨集群数据镜像 MirrorMaker
在分布式系统中,数据镜像是一项重要的功能,它可以将数据从一个集群复制到另一个集群,以保证数据的高可用性和容错性。Apache Kafka是一个流处理平台,它提供了一种跨集群数据镜像的解决方案,可以让用户轻松地将数据从一个Kafka集群复制到另一个Kafka集群。Kafka跨集群数据镜像的实现方式是通过Kafka Connect来完成的。Kafka Connect是Kafka提供的一种可扩展的数据导入和导出框架,它可以将数据从外部系统导入到Kafka集群中,也可以将Kafka集群中的数据导出到外部系统中。原创 2023-06-01 21:15:00 · 17951 阅读 · 0 评论 -
Apache Kafka - 构建数据管道 Kafka Connect
Kafka Connect 是一个工具,它可以帮助我们将数据从一个地方传输到另一个地方。比如说,你有一个网站,你想要将用户的数据传输到另一个地方进行分析,那么你可以使用 Kafka Connect 来完成这个任务。Kafka Connect 的使用非常简单。它有两个主要的概念:source 和 sink。Source 是从数据源读取数据的组件,sink 是将数据写入目标系统的组件。原创 2023-06-01 19:30:00 · 18557 阅读 · 0 评论 -
Apache Kafka - 灵活控制Kafka消费_动态开启/关闭监听实现
在实际应用中,往往需要根据业务需求动态开启/关闭Kafka消费者监听。例如,在某些时间段内,可能需要暂停对某个Topic的消费,或者在某些条件下才开启对某个Topic的消费。在Spring Boot中,要实现动态的控制或关闭消费以及动态开启或关闭监听,可以使用Spring Kafka提供的一些功能。原创 2023-05-31 19:20:18 · 19881 阅读 · 0 评论 -
Apache Kafka - 如何实现可靠的数据传递
所以,Kafka 通过分区多副本、生产者消费者重试机制、批量操作与校验、顺序写磁盘与页缓存、混合存储、高可用设计以及时间戳与消息编号等手段,实现了高吞吐、低延迟与高可靠的数据传输。这也体现了 Kafka 的设计目标与关键机制。原创 2023-05-28 19:52:36 · 17700 阅读 · 0 评论 -
Apache Kafka - 理解Kafka内部原理
生产者将消息发送给分区的领导者,领导者将消息追加到日志并进行复制。消息以追加的方式写入日志片段,并根据一定的大小或时间策略进行日志段的滚动和压缩。这种存储模型支持高吞吐量的消息写入和顺序读取,并允许消息的持久化存储和回溯。ZooKeeper维护了有关Kafka集群中所有服务器的元数据信息,包括主题(topics)、分区(partitions)以及它们在集群中的分布情况。总之,Kafka的实现机制包括集群成员关系的管理、控制器的角色分配、基于副本的复制机制、请求的处理和基于提交日志的物理存储。原创 2023-05-28 12:46:57 · 17484 阅读 · 0 评论 -
Apache Kafka - 高性能原因探究
分布式架构:Kafka 采用分布式集群架构,可以水平扩展到上万个节点,支持每秒处理百万级消息。持久化存储:Kafka 使用文件系统持久化存储消息,避免了数据库成为性能瓶颈,大大提高了吞吐量。顺序读写:Kafka 的消息和文件都是顺序读写的,不需要频繁的随机寻址,这种顺序写入的方式非常高效。零拷贝:Kafka 使用 SendFile 技术,可以直接将文件映射到内核空间和网络空间,避免用户空间和内核空间之间的拷贝,提高网络吞吐量。原创 2023-05-27 21:24:25 · 18419 阅读 · 0 评论 -
Apache Kafka - ConsumerInterceptor 实战(2)
在Spring Boot中配置Kafka消费者的拦截器需要进行以下步骤:首先,创建一个拦截器类,实现Kafka的ConsumerInterceptor接口,定义拦截器的逻辑。在应用的配置文件(例如application.properties或application.yml)中,添加拦截器相关的配置项,其中包括设置interceptor.class属性为拦截器类的全限定名。原创 2023-05-25 21:02:27 · 18598 阅读 · 0 评论 -
Apache Kafka - ConsumerInterceptor 实战 (1)
ConsumerInterceptor是Kafka中的一个重要组件,它允许开发人员在Kafka消费者端拦截和修改消息的处理过程。ConsumerInterceptor可以用于实现各种功能,从消息监控到数据转换和错误处理,为开发人员提供了更大的灵活性和可定制性。ConsumerInterceptor的主要作用是在消息被消费之前和之后对其进行拦截和处理。原创 2023-05-25 20:41:02 · 18912 阅读 · 0 评论 -
Apache Kafka - 重识消费者
Kafka是一个分布式的消息队列系统,它的出现解决了传统消息队列系统的吞吐量瓶颈问题。Kafka的高吞吐量、低延迟和可扩展性使得它成为了很多公司的首选消息队列系统。在Kafka中,消息被分成了不同的主题(Topic),每个主题又被分成了不同的分区(Partition)。生产者(Producer)将消息发送到指定的主题中,而消费者(Consumer)则从指定的主题中读取消息。接下来我们将介绍Kafka消费者相关的知识。原创 2023-05-20 23:15:00 · 19314 阅读 · 1 评论 -
Apache Kafka - 重识Kafka生产者
Kafka 生产者是 Apache Kafka 中的一个重要组件,它负责将数据发送到 Kafka 集群中。在实时数据处理和流式处理应用程序中,Kafka 生产者扮演着非常重要的角色。这里我们将介绍 Kafka 生产者的概念、工作原理以及如何使用 Kafka 生产者。Kafka 生产者是 Apache Kafka 中的一个重要组件,它负责将数据发送到 Kafka 集群中。Kafka 生产者的工作原理是连接 Kafka 集群、发送数据、处理错误和关闭连接。原创 2023-05-20 21:15:00 · 18411 阅读 · 0 评论 -
Apache Kafka - 安装注意事项
在现代的大数据时代,消息队列成为了极为重要的组件。Kafka作为一种高吞吐量、低延迟、可扩展的分布式发布订阅消息系统,在大数据领域得到了广泛的应用。来,这里我们将介绍如何安装Kafka以及一些配置注意事项。原创 2023-05-20 19:00:00 · 18686 阅读 · 0 评论