当前位置: 首页 > 网络应用技术

卡夫卡有多高?(rng nb)

时间:2023-03-07 15:55:31 网络应用技术

  在谈论Kafka High anderable之前,请让RNG NB进入评论区域!

  每个人都知道系统体系结构有三个高点:“高性能,高合并和高可用性”,这三个的重要性是自我的。

  对于任何系统,同时遇到三个高点都是非常困难的事情。大型业务系统或传统中间件将构建复杂的体系结构以确保。

  除上述三种模式外,还有一个指标方向也很重要,即高可靠,甚至您也可能将其与“高可用性”相混淆。

  实际上,两者不一样。高可用性将更可用于整体服务,防止系统停机时间等等。高可靠性是索引数据的可靠性保证。您可以理解“高可靠性”是一个比系统三个高点更薄的概念。

  那么数据的高可靠性是什么?总而言之,系统必须提供可靠的数据支持,并且不可能发生诸如损失和重复之类的错误现象。

  因此,每一个开源中间件都会声明,在发布版本时,它在文档中非常可靠,就像每个温暖的人在520年代所说的那样。

  我们的主角卡夫卡就是一个例子。

  因为有一段时间没有新闻,所以为了帮助您更好地理解这篇文章,让我们首先回顾一下Kafka的基本概念:

  如上图所示,主题1和主题2总共有两个分区,主题2只有一个分区,每个分区中都有一个领导者副本和两个追随者副本。它们分布在每个不同的剂nodesuerior上。

  只有领导者副本负责与分区中的生产者和消费者的互动。追随者副本将定期从领导者副本中获取数据,以确保整个集群的可用性。

  KAFKA通过复制机制存储在数据中,因此某些机制需要确保可以在交叉集群的副本之间可靠地传输数据。

  业务数据包装到系统中的消息流中。由于每个组件都在不同的服务器上分发,因此主题和生产者和消费者之间的数据可能会有一定的时间延迟。不同的集合:

  AR(分配的副本)

  请参考已分配数据的分区副本,通常是指LENGER COPY +追随者副本。

  ISR(在同步副本中)

  请参考带有领导者副本数据的副本的副本。当追随者副本数据与领导者副本数据保持同步时,这些副本在ISR中,ISR集合将根据数据同步状态动态变化。

  OSR(OUT SYNC副本)

  一旦追随者副本的数据同步进度无法与领导者保持一致,则将其放置在一个名为OSR的集合中。也就是说,该集合包含一个不处于同步状态的分区副本。

  好的,无论是否同步是否同步,是否有任何标准判断?

  数据同步时间差通过replica.lag.time.max.ms的参数设置,其默认值为10。

  选择新的领导者。

  我们只是说Kafka通过ACK发送数据同步信号。有几个设置?

  生产者发送一条消息,而不再发送消息。如果发送的消息在通信的方式上丢失,或者在执行磁盘之前可能会丢失消息。

  它的优势是性能很高。如果您认为,您不需要等待另一方回复并继续发送下一批,因此保存新闻的时间。同一时间的范围比其他人可以处理更多的数据。缺点是其可靠性确实很低。数据确实丢失了。

  收到消息并写在本地磁盘上后,消息处理被认为是成功的。此方法将比上一个方法更好。当领导者收到消息并写入本地磁盘时,消息处理成功。无论跟随器是否同步,它都会返回到产品。

  但是,如果分区负责人所在的经纪人可能会丢失数据,则可能会丢失它,因此跟随器副本的数据同步非常重要。

  Kafka默认使用此方法。

  只有在收到分区中所有副本的响应时,信息才能相信新闻已经成功。

  尽管此方法非常适合可靠的数据保证,但它的性能和影响吞吐量很差,因此通常不采用它。

  它是绝对可靠的吗?也许。最重要的事情取决于复制数据是否同时完成。如果产品在收到响应消息之前被领导者挂起,那么生产者将重复该消息,因为该消息未接收到消息,这可能导致数据重复。如何解决?只需确保可用的业务能力即可。

  我们可以通过request.required.acks参数控制消息的发送频率。

  新闻集群是整个复杂的系统,因此由于各种原因,该消息可能会发送到消息。Kafka为这些可能场景定义了相应的消息语义。

  最多一次

  这意味着新闻可能是消费者0或1次的消费者。如果场景如下:

  您必须考虑一下。在第三步中,如果消费者将消息传达到仓库中,如果由于任何原因,消费者a悬挂了,则该数据尚未在消费者B. AT B.AT之后输入,则分区是未知的,那么这将引起问题:数据丢失。

  至少一次

  它至少代表分区的消息分布。通信过程如下:

  假设消费者a会悬挂数据,因为数据库包含在数据库中后,消费者组将返回到分区过程,则该分区将被发送tolibrary,从而导致数据重复。

  在没有电力保护的情况下,例如重复转移并重新付费重叠点,结果可能是致命的。

  完全是一次

  代表新闻可以一次消失而不会丢失或重复。

  在至少一次的基础上,假定消费者在将ACK返回分区的过程中倒下。然后,消费者将不会遵循分区偏移。它将首先转到数据库,以检查与最新消息相对应的挠度,然后根据偏移位置返回相应的偏置位置返回Kafka群集。

  我不知道有多少朋友在这里看到。如果您认为这么远,那么您可以帮助您喜欢它,让我看看有多少个好的学习婴儿。

  一开始,我们说真正的处理数据是领导者副本。追随者副本仅负责数据的同步和保存。如果两者的数据不一致怎么办?

  在谈论一致性保证过程之前,您需要了解用来表示复制数据同步的两个KAFKA的概念:

  HW(高水印):中文翻译是一个高水位,用于反映数据同步数据的相对位置。消费者最多只能消耗HW的位置。通过HW,我们可以确定副本是否可见数据。

  狮子座(日志结束偏移):要编写消息的下一个记录。

  从生产者那里获得的领导者复制以获取消息,追随者副本实时同步LEDER的数据。目前,它们的同步数据与2的位置相同,下一个书面消息是偏移4:

  假设由于意外的领导者,追随者被选为新领导者。从那时起,最新的排量4和5是由生产者撰写的。

  一段时间后,通过修复和恢复服务,它将发现它与新领导者的数据不一致:

  为了确保数据一致性,必须强行妥协一个方。由于数据不断令人耳目一新,因此旧领导者目前的优先级将比新领导作为新领导者的新领导者,新领导者的数据必须相同。这一定是一样的。这一定是一样的。这一定是一样的。这必须是相同的。这是Kafka数据截断机制。

  像其他中间件一样,Kafka的主要角色是通信,因此,即使将数据保存在磁盘上,它仍然会占据一定的空间。为了节省存储空间,它将通过某些机制清理过期的数据。

  日志删除将直接删除日志段,而KAFKA将保持及时的检查并删除“过期数据”。

  它在每个日志文件中保持最大时间戳,以确认当前配置的删除时间。只要将日志段写入新消息,该字段就会被更新。编写日志部分后,它将不会再次收到新的新闻。它将创建一个新的日志文件以在内部写入数据。

  编写每个日志文件后,其最大时间戳保持不变。只要Kafka将当前时间戳与最大时间戳进行比较,就可以确定文件文件是否过期。

  Kafka的默认配置log.trention.hours = 168,这是7天日志保留时间。

  这与上面的方式相同,但是这一次它会随时间变化。

  Kafka将通过每个日志空间的大小来计算总容量阈值,然后计算当前的实际空间大小和总容量阈值。如果此差异大于单个日志部分的大小,则否则不要做任何事情。

  以同样的方式,也可以通过log.trention.bytes参数设置此阈值。

  KAFKA的消息由钥匙值组成。如果日志段中有多个相同的密钥,但是数据值不同,则它将选择性地清除旧数据并保留最近的记录。

  特定的压缩方法是创建一个检查点文件,该文件从日志的起始位置横穿到最大端位置,然后将每个消息的键和密钥保存在固定的capacity skimpyoffsetmap中。

  这样,上一个值将被背面覆盖。如果日志文件中有相同的密钥,则只会保留最新的密钥。

  Kafka通过ACK响应机制确保不同组件之间的沟通效率。通过副本同步机制,数据拦截和数据清除机制,达到了数据的管理策略,以确保整个系统的运行效率。

  作为高性能,同时考虑到高可靠性的中间件,Kafka可能会吹过太多。如果本文对您有帮助,请单击右下角的拇指,下次我们将详细解释Kafka如何在副本期间实现数据传输。

  您知道的越多,您就越不知道。每个人的称赞对我来说非常重要。如果本文帮助您更多地了解Kafka,则可以在评论领域“变得更强大”。

  我也希望您的错误与下图相同。我们下次会看到它。

  本文包括githubhttps://github.com/javafamily。有大量的工厂面试测试网站。欢迎来到明星。

  原始:https://juejin.cn/post/7103323496175894564