zoukankan      html  css  js  c++  java
  • nifi主节点切换导致任务堆积无法处理

    nifi主节点切换导致任务堆积无法处理

    nifi的分布式方案,实际只是多节点的同类Processor并行执行,分布式比较简陋

    Processor可以是producder,可以是consumer,也可以同时有producder/consumer 两种身份

    官方建议的根producder,最好只是由master执行,consumer则全node都可执行

    如果指定只有master可以consumer的话,会有以下问题

    通俗点说

    指定某些工作只有master能做,A是当前master

    给A安排了些工作,A在处理中

    然后集群故障重新选举,B成了master,A不再是master

    那因为没有master身份,不能执行之前当master时堆积的任务


    这个问题不好解决,但可以结合监控及时发现并作处理

    nifi的一致性保证,以类似预写日志机制(WAL)的方式实现,提前写入目标节点的本地存储

    上流的所有flowfile,分布式环境会写入下流node的wal内

    在以下条件下,导致会一个处理延迟的问题

    • 1 分布式环境,分布式环境会选择出一个master执行

    • 2 部分场景会设置processor只能在master节点执行

    • 3 processor会消费上流flowfile

    由于上游的flowfile是预写到处理节点的,如果processor只能在master上执行,则会将flowfile写入到master的file system。

    正常情况没有问题,但是如果因为某些原因,如oom,网络问题导致,master(此节点为node1 )失联,重新选举,而新的master是另外一个node2

    那么由于porcessor只能在master执行,则新的flowfile会写入node2并在node2上执行,但是,node1上虽然有待处理的flowfile,但是因为node1已经不是master

    则processor不会处理WAL里的flowfile,直到node1重新又成为master


    其实这类似分布式事务的一个问题点,使用etcd,zk的分布式事务方案,可以保证下一个leader一定会选择出来,但时间要素无法保证,当然,这个问题在通常的分布式环境不用考虑

    这个问题暂时没有好办法,倒也不算nifi的bug,而是为了一致性保证而做的的权衡

    避免的办法,是从业务角度,避免同时满足以上3个条件。或者业务层面添加报警机制,及时发现,支持处理

  • 相关阅读:
    【PBR的基本配置】
    【super vlan的配置】
    Day_03-函数和模块的使用
    Day_02-Python的循环结构
    Day_02-Python的分支结构和循环结构
    Day01_课后练习题
    Day01_初识Python
    一、Linux知识体系结构图
    NAND Flash结构及驱动函数
    区分大端和小端
  • 原文地址:https://www.cnblogs.com/zihunqingxin/p/14460071.html
Copyright © 2011-2022 走看看