美文网首页
python访问kafka生产send与消费poll很慢的原因分

python访问kafka生产send与消费poll很慢的原因分

作者: HellWord | 来源:发表于2021-04-22 10:39 被阅读0次

    生产send与消费poll很慢的原因分析

    kafka版本为kafka_2.12-2.7.0消费时主要表现在poll()几乎是卡住不动,分两种情况:

    一、使用listeners的hostname,同时客户端配置hosts

    1. server.properties的配置:<code>listeners=PLAINTEXT://eas-61-13-20-41:9092</code>

    2. 访问时使用的是:<code>consumers = KafkaConsumer(bootstrap_servers="192.168.1.1:9092", group_id='wxk',auto_offset_reset='earliest')</code>

    3. 而本地电脑的hots文件未增加<code>IP hostname</code>的配置

    此时如果在hots中增加<code>ip hostname</code>的配置,则可解决此问题。

    二、使用listeners的IP监听

    1. server.properties的配置:<code>listeners = PLAINTEXT://192.168.1.1:9092</code>
    2. 客户端访问时使用<code>consumers = KafkaConsumer(bootstrap_servers="192.168.1.1:9092", group_id='wxk',auto_offset_reset='earliest')</code>
    3. <font color=red>此时客户端消费时不影响</font>

    三、不显式配置listeners

    1. server.properties的配置:<code>#listeners=PLAINTEXT://:9092</code>,保持默认的注释,而不显式配置。
    2. 访问时使用<code>consumers = KafkaConsumer(bootstrap_servers="192.168.1.1:9092", group_id='wxk',auto_offset_reset='earliest')</code>,此时<font color=red><code>consumers.poll()</code>就会卡住</font>,需要增加客户端电脑的hosts配置。

    四、分析其问题原因

    根据kafka配置文件server.properties的解释:

    # The address the socket server listens on. It will get the value returned from 
    # java.net.InetAddress.getCanonicalHostName() if not configured.
    #   FORMAT:
    #     listeners = listener_name://host_name:port
    #   EXAMPLE:
    #     listeners = PLAINTEXT://your.host.name:9092
    #listeners=PLAINTEXT://:9092
    
    # Hostname and port the broker will advertise to producers and consumers. If not set, 
    # it uses the value for "listeners" if configured.  Otherwise, it will use the value
    # returned from java.net.InetAddress.getCanonicalHostName().
    #advertised.listeners=PLAINTEXT://your.host.name:9092
    

    按照配置文件中的解释,如果没有配置listeners时则使用java.net.InetAddress.getCanonicalHostName(),同时Hostname and port the broker will advertise to producers and consumers,如果未设置advertised.listeners,则依次使用listeners、ava.net.InetAddress.getCanonicalHostName().

    至次已经明确,如果未显示配置使用IP,则kafka会使用hostname监听,此时客户端使用IP访问,则由于没有域名与IP的对应关系,导致访问非常慢(卡住不动的状态)。
    五、结论

    1. 最好是在server.properties的配置文件是,使用IP显示配置listeners
    2. 其次是在客户端电脑中修改hosts文件,增加hostname与ip的配置。

    相关文章

      网友评论

          本文标题:python访问kafka生产send与消费poll很慢的原因分

          本文链接:https://www.haomeiwen.com/subject/icyxrltx.html