Kafka常见问题解析

文章目录

  • 1. kafka为什么不支持读写分离?这样做的优点有哪些?
  • 2. Kafka可靠性研究
    • 2.1生产者
    • 2.2 服务端
    • 2.3 消费者
  • 3. Kafka零拷贝原理
  • 4. Kafka生产者发送消息流程

1. kafka为什么不支持读写分离?这样做的优点有哪些?

Kafka 不直接支持主写从读(Master-Slave)模式的原因是,Kafka 的设计目标是提供高吞吐量和低延迟的分布式消息传递系统,而不是传统的主从复制数据库系统。
以下是一些原因解释为什么 Kafka 不支持主写从读模式:

    1. 数据一致性:Kafka 保证副本之间的数据一致性,而不是强一致性。主写从读模式通常要求强一致性,即主节点写入的数据必须立即同步到所有从节点。这样的强一致性要求会对性能和可用性产生负面影响,与 Kafka 的设计目标不符。
    1. 读扩展性:Kafka 的设计重点是提供高吞吐量的读取能力。通过允许消费者直接从副本读取数据,Kafka 可以水平扩展读取操作,从而实现更高的吞吐量。如果支持主写从读模式,读取将受到主节点的限制,并且无法获得与 Kafka 的分布式读取能力相媲美的性能。
    1. 失效容错性:Kafka 的设计考虑了节点故障的情况。副本可以接管主节点的角色,从而确保数据的可用性和持久性。如果支持主写从读模式,可能会引入更复杂的故障处理和故障转移机制,增加系统的复杂性和维护成本。

Kafka 只支持主写 主读有几个优点 :

    1. 可以简化代码的 实现逻辑,减少出错的可能;
    1. 将负载粒度细化均摊,与主写从读相比,不仅负载效能更好,而 且对用户可控;
    1. 没有延时的 影 响;
    1. 在副本稳定的情况下,不会出现数据不一致的情况。

2. Kafka可靠性研究

2.1生产者

消息确认机制:Kafka 提供了消息的生产者确认机制,确保消息已经被成功写入到 Kafka 中。生产者可以选择同步等待消息的确认,或者异步发送消息。同步方式可以确保消息写入的可靠性,但会引入一定的延迟,而异步方式则可以提供更高的吞吐量。
ACKS参数的值有三种,0,1,-1:

  • 0:生产者发送消息后不需要等待来自 Kafka 代理的确认。这意味着生产者不会知道消息是否成功发送到 Kafka,也无法感知到消息发送失败的情况。这是最低延迟的设置,但也是最不可靠的设置,因为消息可能会丢失。
  • 1: 生产者在将消息写入 Kafka 分区的 leader 副本后会收到来自 leader 副本的确认。这意味着至少有一个副本成功接收到消息。对于单个副本的故障而言,消息可能会丢失。
  • -1:生产者在将消息写入 Kafka 分区的所有副本后才会收到来自所有副本的确认。这是最安全的设置,因为只有在所有副本都成功接收到消息后,生产者才会认为消息发送成功。这种设置提供了最高的可靠性保证,但也需要更多的时间和资源。

2.2 服务端

    1. 持久性:Kafka 使用日志(log)的方式来存储消息,使得消息可以持久化保存在磁盘上。这意味着即使在消息被消费之后,它们仍然可以在 Kafka 中保留,并且可以根据需要重新消费。
    1. 复制机制:Kafka 支持将消息复制到多个副本(replica)中。副本分布在不同的节点上,可以提供数据的冗余和高可用性。如果某个节点故障,可以从其他副本中获取数据,确保数据的可靠性和持久性。
    1. ISR(In-Sync Replicas)机制:Kafka 使用 ISR 机制来确保数据的可靠性。ISR 是与主副本(leader replica)保持同步的副本集合。只有 ISR 中的副本才能被认为是可靠的,并且可以被消费者读取。如果一个副本与主副本的同步延迟超过一定阈值,它将被移出 ISR,直到追赶上主副本的进度。
    1. 故障转移:Kafka 具有故障转移机制,可以在节点故障时自动进行副本的重新分配和重新平衡。当节点故障时,Kafka 可以将副本的角色切换到其他可用节点上,从而确保数据的可用性和持久性。

2.3 消费者

手动位移提交。

3. Kafka零拷贝原理

Kafka 使用零拷贝(Zero-copy)技术来提高性能和减少数据传输的开销。零拷贝是一种技术,使数据从一个应用程序传输到另一个应用程序时,避免了数据的多次复制,从而减少了 CPU 的开销和内存带宽的消耗。
下面是 Kafka 实现零拷贝的原理:

    1. 文件发送:Kafka 使用文件系统进行消息的存储,每个分区都有一个或多个日志段(log segment)文件。当消息被写入 Kafka 时,它们首先被追加到日志段文件的末尾。
    1. 零拷贝技术:Kafka 使用 Java NIO(New I/O)库中的 FileChannel 和 ByteBuffer 类来实现零拷贝。当消息被写入日志段文件时,Kafka 生产者使用 FileChannel 来将数据从内存缓冲区(例如 ByteBuffer)直接写入文件系统,而无需通过用户空间和内核空间之间的数据拷贝。
    1. 内核空间和用户空间:传统的数据传输方式涉及将数据从用户空间复制到内核空间,然后再从内核空间复制到网络套接字进行传输。而采用零拷贝技术后,数据可以直接从用户空间传输到网络套接字,避免了额外的数据复制。
    1. DMA(Direct Memory Access):通过使用 DMA,Kafka 生产者可以绕过 CPU,直接将数据从内存缓冲区传输到网络适配器,从而进一步减少 CPU 的介入和数据复制的开销。
      通过使用零拷贝技术,Kafka 可以在消息传输过程中减少数据的复制次数,提高了性能和吞吐量,并降低了资源消耗。这对于高性能的消息传递系统非常重要,特别是在需要处理大量数据和高并发的情况下。

传统的文件读写或者网络传输,通常需要将数据从内核态转换为用户态。应用程序读取用户态内存数据,写入文件 / Socket之前,需要从用户态转换为内核态之后才可以写入文件或者网卡当中。我们可以称之为read/write模式,此模式的步骤为:

  • 首先,调用read时,磁盘文件拷贝到了内核态;
  • 之后,CPU控制将内核态数据copy到用户态下;
  • 调用write时,先将用户态下的内容copy到内核态下的socket的buffer中;
  • 最后将内核态下的socket buffer的数据copy到网卡设备中传送;

在这里插入图片描述
零拷贝
在这里插入图片描述

    1. 将文件拷贝到kernel buffer中;
    1. 向socket buffer中追加当前要发生的数据在kernel buffer中的位置和偏移量;
    1. 根据socket buffer中的位置和偏移量直接将kernel buffer的数据copy到网卡设备中;

4. Kafka生产者发送消息流程

在这里插入图片描述

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

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

相关文章

啤酒:精酿啤酒与沙拉的轻盈享受

在繁忙的生活中,我们总是在寻找一种简单而健康的美食享受。当Fendi Club啤酒与沙拉相遇,它们将为我们带来一场轻盈的味觉之旅。 Fendi Club啤酒,以其醇厚的口感和淡淡的麦芽香气而闻名。这款啤酒在酿造过程中采用了特别的工艺,使得…

5 原型模式 Prototype

1.模式定义: 指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 2.应用场景: 当代码不应该依赖于需要复制的对象的具体类时,请使用Prototype模式。 Spring源码中的应用 org.springframework.beans.factory.support.AbstractB…

从零开始学习PX4源码1(两个三维矢量如何转换成四元数)

目录 文章目录 目录摘要参考网址推导过程 摘要 本节主要记录px4如何从两个三维旋转矢量转换到四元数的过程,欢迎批评指正!!! 参考网址 三维矢量转四元数 推导过程

力扣 面试题 05.06. 整数转换

思路: 牵扯到二进制数,基本上要考虑位运算符,相关知识可以见http://t.csdnimg.cn/fzts7 之前做过类似的题目,大致思路就是先用按位异或^找出不同位,再用n&(n-1)计算出不同位的个数&#x…

11、内网安全-横向移动NTLM-Relay重放Responder中继攻击LdapEws

用途:个人学习笔记,有所借鉴,欢迎指正! 目录 前提知识: 一、横向移动-NTLM 中继攻击-Relay 重放-SMB 上线 1、CS权限转给MSF: 2、MSF: 3、添加路由: 4、smb_relay重发模块: 5、受控主机输…

《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(2)-Wireshark在Windows系统上安装部署

1.简介 上一篇主要讲解一下软件的介绍以及软件的抓包原理。 2.安装部署环境 2.1操作系统 1.宏哥的环境是Windows 10版本 64位系统(32位的同学自己想办法哦),其实宏哥觉得无论在什么平台,多少位,其实安装都是类似的…

机遇与挑战并存 企业级软件如何突围向上

如果企业级软件能够像TO C产品那样,购买者就是使用者,那企业级软件市场可能会大不一样。不过,事实并非如此。因为无论是商业模式,还是专业程度和用户群体,二者都有显著区别。而这种区别也使得我们不得不从一个全新视角…

压缩感知常用的重建算法

重建算法的基本概念 在压缩感知(Compressed Sensing, CS)框架中,重建算法是指将从原始信号中以低于奈奎斯特率采集得到的压缩测量值恢复成完整信号的数学和计算过程。由于信号在采集过程中被压缩,因此重建算法的目标是找到最符合…

浅谈建筑能耗监测与智能控制系统

摘要:通过云平台服务功能,对建筑物内传感器数据采集、各类数值量进行互联网上传,在云平台进行大数据分析对比,构建建筑能耗监测、智能控制和管理服务系统,实现对各类建筑能耗情况的统计、分析、诊断和预警等,实现对用电设备进行有效的智能控制与管理,降低用能客户能…

170基于matlab的DNCNN图像降噪

基于matlab的DNCNN图像降噪,网络分为三部分,第一部分为ConvRelu(一层),第二部分为ConvBNRelu(若干层),第三部分为Conv(一层),网络层数为17或者20层…

ChatGPT调教指南 | 咒语指南 | Prompts提示词教程(二)

在我们开始探索人工智能的世界时,了解如何与之有效沉浸交流是至关重要的。想象一下,你手中有一把钥匙,可以解锁与OpenAI的GPT模型沟通的无限可能。这把钥匙就是——正确的提示词(prompts)。无论你是AI领域的新手&#…

国际阿里云,想要使用怎么解决支付问题

在国内我们很多时候都需要用到国际阿里云,在国际阿里云需要使用就需要支付,自己办理visa卡比较麻烦,那么我们可以使用虚拟卡,虚拟卡办理快速简单 真实测评使用Fomepay的5347支持国际阿里云的支付,秒下卡,不…