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

KAFKA大型工厂高 - 频率面条测试问题:确保高性能的高性能和高吞吐量

时间:2023-03-07 23:20:12 网络应用技术

  KAFKA的消息传输保证机制非常直观。当生产商向经纪人发送消息时,一旦消息提交,它就不会丢失,因为复制机制存在。但是,如果产品将数据发送给经纪人,则网络问题会遇到通信中断,那么生产者无法确定是否已提交消息(提交)。尽管Kafka无法确定网络故障期间发生的事情,但生产者可以多次重试,以确保已将消息正确传输给经纪人,因此Kafka,因此目前至少实施一次。

  诸如电源之类的SO称为功率与接口的多个呼叫的结果结果相同,与呼叫一致。生产者可以在审查时反复写出消息,并且可以通过使用KAFKA的功率和其他功能来避免这种情况性功能。

  权力和其他性质是有条件的:

  生产者以权力等力量为例。与正常情况相比,生产商的使用几乎没有变化。您只需要将产品的配置启用设置为true,如下所示:

  权力和其他性质不能在多个分区之间运行,交易可以弥补这一缺点,交易可以确保多个分区写作操作的原子量。操作的原子性意味着多个操作是成功的或全部失败的,并且都在那里,并且在那里,并且是失败的一部分失败的可能性。

  为了实现交易,该应用程序必须提供通过客户端程序设置的唯一TransTactionalID。

  请参阅代码库:com.heima.kafka.chapter7.producertransactionsend

  交易要求生产者打开权力的性特征,因此有必要将事务参数设置为非空置参数,以打开交易特性,同时设置产品特性的例外。

  Kafkaproducer提供了与交易相关的5种方法,如下:

  请参阅代码库:com.heima.kafka.chapter7.producertransactionsend

  消息发送端

  仿真回滚案例

  从上述情况下,在成功发送了MSG1之后,异常事务被退回,MSG1消费者方无法收到新闻。

  卡夫卡集群中将有一个或多个经纪人。分区。分区中的ISR设置更改时,控制器负责通知所有经纪人以更新其元数据信息。当使用kafka-topics.sh脚本以增加某个主题的分区数时,控制器也负责用于重新分配分区。

  卡夫卡中控制器选举的工作取决于动物园管理员。作为控制器的成功广告系列,将在Zookeeper中创建/控制器的临时(短暂)节点。该临时节点的内容如下:

  该版本在当前版本中固定为1。BrokerId指示控制器的经纪人的ID号,而时间戳表示该活动称为控制器时广告系列的时间戳。

  在任何时候,群集中只有一个控制器。每个经纪人启动时,您将尝试读取/控制器节点的经纪人的值。如果BrakerID的价值不是-1,则意味着已经有其他经纪人节点可以成功地作为控制器进行竞选,因此目前的Brokerr将促使人们竞选活动。如果Zookeeper中没有/控制器节点,或该节点中的数据异常,则您将尝试创建节点/控制器。当创建当前的经纪人来创建节点时,其他经纪人也可以尝试同时创建该节点。只有成功的经纪人将成为一个控制者,而失败的经纪人表示该活动失败了。每个经纪人在内存中保存当前控制器的经纪人值。该值可以识别为ActiveControllerid。

  还有与控制器有关的A/Controller_epoch节点。该节点是一个长期的节点。该节点存储在Integer Controller_epoch值中。controller_epoch用于记录控制器的更改数,即当前控制器是第一代控制器,我们也可以称其为“控制器的ERA”。

  Controller_epoch的初始值为1,即集群中的第一个控制器的时代为1。更改控制器时,添加了无新控制器的字段值。与控制器进行交互的请求EAVER CONTRATINC场地。如果请求的controller_epoch值小于内存中的controller_epoch值,则认为此请求是已过期控制器发送的请求,因此请求将识别asinvalid请求。如果请求的contrenter_epoch值大于controller_epoch值在内存中,这意味着已经有了新的控制器。

  具有控制器身份的经纪人比其他普通经纪人需要更多的责任。具体细节如下:

  如何确定分区的副本是否处于同步故障状态?从kafka 0.9.x版本中,它由唯一的参数replica.lag.lag.time.max.ms(默认大小为10,000)控制。当ISR中的追随者副本滞后在引导副本后面时,参数replica.lag.time.max.ms指定值时,将其确定为副本的副本。您需要从ISR中获取此追随者副本。具体的实现原则非常简单。当追随者副本同步领导者副本的日志(日志结束偏移量和最后一条消息)时,被认为已将追随者副本捕获到领导者副本上。此时,应进行更新。COPY.KAFKA的复制管理器(replicamanager)的lastcaughtimems徽标启动了过期检测的正时任务的副本,并且此计时任务会检查当前时间和副本的差异是否差异大于参数replica.lag.time.max.ms.sescendo所指定的值,只要拉出领导者的数据,它将更新LastCuptiptimems。想象一下,领导者副本的流入速度比追随者副本的绘图速度。如果此追随者副本仍然放在ISR中,那么当领导者副本无效时,然后选择此追随者副本作为新的领导者副本,那么将会出现严重的新闻损失。

  KAFKA中的每个主题分区均已复制n次,n是主题的复制因素。当群集服务器失败时,允许Kafka自动切换到这些副本,因此在发生故障时仍可可用。Kafka的复制是基于分区,并将分区中的前写作日志复制到n个服务器。读取只能从领导者分区中进行),关注者只按顺序从领导者那里复制日志。

  副本无法如下同步领导者。慢复制:追随者无法在一定时期内赶上领导领导者在一段时间内的要求。由于GC停职或追随者的失败或死亡,追捕副本被困。

  新启动的副本:当用户向主题添加副本因子时,新的追随者不在同步副本列表中,直到他们完全赶上领导者日志。

  如何确定副本落后

  现在,服务器上只有一个参数需要replica.lag.time.max.ms.s.此参数解释了副本的最长等待时间,以响应分区的领导发送请求时间间隔以超过replica.lag.time.max.ms.ms.ms.kafka会认为该副本已死于同步副本列表。检测缓慢复制机制已更改 - 如果复制品开始落后于领导者replica.lag.time.max.ms.ms.kafka认为它太慢了,并且将从同步副本列表中删除。除非副本请求更大,但领导者时间间隔大于replica.lag.lag.lag.max.max.ms,即使领导者增加了流量并大量编写消息。Kafka也不会从同步副本列表中删除副本。

  数据丢失现场

  数据场景是不一致的场景

  上述两个问题的根本原因是,使用HW值来衡量副本的成功副本的成功,以及在出现故障时拦截日志的基础,但HW值得更新是异步的,尤其是其他提取请求处理过程要进行更新,因此中间的任何崩溃都可能导致HW值到期。在这些原因的视图中,Kafka 0.11介绍了Leader Epoch以替换HW值。领导者END END打开了内存的附加部分保存领导者时期信息的区域,以便即使上述两种情况出现在上面,也可以避免这些问题。

  SO -CALLED领导者Epoch实际上是一对值:( epoch,offset)。epoch说,从0开始,当领导者更改一次时,领导者的版本数将为+1,偏移量对应于从时期版本的领导者中的第一条消息的位移。因此,假设有两对值:

  这意味着第一个领导者从排量0开始。共有120篇文章[0,119];第二个领导者版本编号为1,从排量120开始。

  此缓存将保存在领导者经纪人中,并定期写入检查点文件中。

  避免数据丢失:

  避免数据不一致

  生产发送的消息没有收到正确的折断响应,从而导致生产者尝试一下。

  制片人发送了一条消息。由于网络等各种原因而打破解决后,发送端被发送到故障响应或网络中断,然后生产者收到了恢复的异常重试消息并重复了该消息。

  解决方案:

  要启动Kafka的功率,无需修改代码,默认值已关闭,并且需要修改配置文件:enable.idempotence = true。

  它可能会丢失,适合于吞吐量指标的重要性,而不是数据丢失,例如:日志收集。

  数据消费未及时向经纪人提交工作。

  解决方案

  每次您消费或退出程序时,都会手动提交。这可能无法保证重复。

  一般的解决方案是允许下游进行电源或尝试记录主机。对于一些严格的场景,您可能需要放置偏移量或唯一的ID,例如订单ID和下游状态更新更新或在下游数据表中记录消费者办公室,然后使用消费者网站使乐观锁定拒绝更新下游数据时旧站点数据更新。

  _consumer_offsets是一个内部主题,对用户来说是透明的。除了其数据文件以及日志中的这两个点偶尔之外,用户通常无法感受到这个主题。但是我们确实知道它保存了新版本的Kafka的位移信息。

  在正常情况下,当可以设置cluster__consumer_offsets中的第一个消费者新闻时,将自动创建该主题。

  请参阅代码库:com.heima.kafka.chapter7.consumeroffsetsanalisyisis

  获取所有分区

  本章主要解释了Kafka相关稳定性的操作,包括处理权和交易的处理,并解释了可靠性保证和一致性保证,并解释了消息的重复和解决方案。

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