导航菜单
路很长,又很短
博主信息
昵   称:Cocodroid ->关于我
Q     Q:2531075716
博文数:359
阅读量:2144797
访问量:255505
至今:
×
云标签 标签球>>
云标签 - Su的技术博客
Tags : kafka,数据模型,主题,分区,副本发表时间: 2022-01-13 00:43:59

###分区

Kafka 数据模型(称为"主题"和"分区")在卡夫卡发展为高性能、高可用性消息传递应用程序方面具有非常重要的作用。主题是将数据分隔成可以接收消息的逻辑模型的单元。例如,逻辑类似于使用电子邮件地址来区分从名为 a 的人收到的邮件和从名为 b 的人那里收到的邮件。

分区是构成主题的数据存储,是可水平扩展的单位。即,通过拆分主题来分区。因此,对主题进行分区是为了提高性能,同时确保从制作人处获得的消息的顺序。

例如,假设四个生产者向一个分区发送了一个需要 1 秒的消息。对于典型的分布式系统,消息的处理时间可能为 1 秒,但消息队列系统存在一个约束。这就是消息的顺序必须保证。因此,即使消息由四个制作人发送,处理所有消息也需要 4 秒。

为了保持顺序并并行处理消息,Kafka 将消息并行处理,将多个分区放在一个主题中。这意味着,如果四个制作人有四个分区,则只需一秒钟的时间来处理所有这些分区。

那么,无条件地增加分区的数量是主动的吗?

不一定。每个分区与卡夫卡代理的目录映射,每个存储的数据存储两个数据。
index 实际数据
Kafka 会为所有目录中的文件打开句柄,最终,随着分区数量的增加,文件句柄的数量也会增加,从而浪费资源。

"句柄**(handle)"是资源(资源)的抽象引用。句柄用于引用应用程序软件在其他系统(如数据库或操作系统)上管理的内存块或对象。资源句柄可以不透明标识符(在这种情况下,它通常用作表示数组索引或表的整数编号,用于管理资源类型),也可以是允许访问更多信息的指针。
https://ko.wikipedia.org/wiki/%ed%95%b8%eb%93%a4_(%ec%bb%b4%ed%93%a8%ed%8c%85)
 
此外,故障恢复时间会增加**。Kafka 支持复制以实现高可用性。复制是复制原始数据,在卡夫卡,每个分区都执行复制,因此一个读取器和另一个分区充当关注者。因此,如果代理发生故障,则必须为每个分区选择一个领导者,因此随着分区数量的增加,选举新领导者的时间将按比例增加。

出于同样的原因,分区的数量可能是加快速度的优势,但也可能是一个缺点。增加分区(尤其是卡夫卡)可以随时更改分区,但相反,除了如何删除主题之外,减少分区数量并不存在。因此,在设置分区数时,最好确定所需目标吞吐量的条件,并逐渐增加分区数,并保留静态数。

  • 卡夫卡建议每个经纪人约2000个的最大分区数。

###复制

Kafka 是一个分布式应用程序,即使在服务器物理故障时也能确保高可用性。为此,Kafka 提供了复制(复制)功能,而不仅仅是重新复制主题本身,而是重新复制构成 **主题的每个分区。

卡夫卡的经纪人由领导者和追随者组成。您只能为领导者执行写作和阅读操作,如果领导者经纪人出现故障,则您的关注者之一将当选为新领导者。

因此,在 Kafka 中,如果任何经纪商还活着,则不会丢失任何数据,但在某些情况下,如果所有经纪商都关闭,则首先同步从正常化经纪商的数据。因此,首先,如果第一个正常化的代理具有的数据是以前的版本,则会导致一些数据丢失。因此,Kafka 选择了从 0.11.0.0 版本开始,等待最后关闭的阅读器恢复正常。

选项可以通过下面的根中的代码确定,如果为 false,则等待最后关闭的读取器恢复正常,true 是同步从服务角度最快恢复正常的代理的数据以提供快速服务,即使消息丢失也是如此。

  1. vi /usr/local/kafka/config/server.properties
  2. unclean.leader.election.enable = false

太多的复制次数也会导致问题,因为太多的分区数可能会带来缺点。

存储空间

首先,存储空间问题。例如,一个分区大小为 100 gb 的代理。如果此代理的复制因子为 3(包括您自己),则卡夫卡群集中所需的总存储大小为 300 GB。

增加代理资源使用量

第二是代理的资源使用量增加。为了进行完全复制,代理将继续检查在用户未注意到时禁用的主题是否复制良好。因此,复制也要求采用适量。

...阅读原文
推荐文章