• kafka shutdown停止关闭很慢问题的解决方案



    kafka shutdown停止很慢问题


    在数据量大的时候,consumer一次抓取数据的数据很多,进入到业务处理的数据可能有很多,

    假设一次poll有1万条数据进入业务程序,而且业务程序是和poll绑定在一起线程同步执行的,假设平均每条数据,执行业务程序花费100ms,

    那么poll一次的数据,至少要执行 1w*0.1s = 1000s = 16.67分钟。

    所以,在数据量大的时候,停止一个线程(需要先等待业务程序处理完数据),可能要十几分钟。

     

    shutdown问题解决方案

    1、改成异步处理数据,consumer取出来的数据,放到BlockQueue中,由异步线程去处理,当异步线程处理不过来时,阻塞consumer,调用consumer.pause()方法avoid group management rebalance,代码如下(来源于Spring-Kafka):

    // avoid group management rebalance due to a slow consumer
    this.consumer.pause(this.assignedPartitions.toArray(new TopicPartition[this.assignedPartitions.size()]));
    
    public void onPartitionsAssigned(Collection<TopicPartition> partitions) {
        this.assignedPartitions = partitions;
    }


    2、如果是同步执行数据处理,考虑提高业务程序 处理数据的速度。


    3、同步处理数据,但是改成手动提交offset,当shutdown的时候,poll的数据不需要全部处理,只需要记录处理的位置即可。代码示例如下:

    list data = consumer.poll();
    for(record: data) { 
        if(shutdown) {  // 收到shutdown命令后立即停止,未处理的数据将丢弃
            break;
        }
       deal(record);
       saveTopicOffset(record);
    }
    submitDealtDataOffset();



    另外,

    Kafka停不掉shutdown关闭不了问题

    原因是卡在了consumer.close()方法里面,它会提交offset信息,如果网络中断或者kafka服务器有问题导致提交不了offset,则consumer.close方法会一直卡住(不停的循环尝试提交offset,永不中断)。


    参见:Kafka poll一直等待的bug:

    https://issues.apache.org/jira/browse/KAFKA-4189?jql=project%20%3D%20KAFKA%20AND%20resolution%20%3D%20Unresolved%20AND%20component%20%3D%20consumer%20ORDER%20BY%20priority%20DESC


    https://issues.apache.org/jira/browse/KAFKA-3172?jql=project%20%3D%20KAFKA%20AND%20resolution%20%3D%20Unresolved%20AND%20component%20%3D%20consumer%20ORDER%20BY%20priority%20DESC



    解决方法:目前还没有好的办法,只能将offset的自动提交改成手动提交offset。但是,我写了一个程序可以在调用consumer.close后将线程强行杀死,作为临时解决方案。



  • 相关阅读:
    win10 uwp 弹起键盘不隐藏界面元素
    win10 uwp 存放网络图片到本地
    win10 uwp 存放网络图片到本地
    sublime Text 正则替换
    sublime Text 正则替换
    win10 uwp 绘图 Line 控件使用
    win10 uwp 绘图 Line 控件使用
    AJAX 是什么?
    什么是 PHP SimpleXML?
    PHP XML DOM:DOM 是什么?
  • 原文地址:https://www.cnblogs.com/zollty/p/6240420.html
Copyright © 2020-2023  润新知