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

2021-04-22  本文已影响0人  HellWord

生产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的配置。
上一篇下一篇

猜你喜欢

热点阅读