IBM Cloud Docs
Event Streams 的已知限制

Event Streams 的已知限制

如果在使用 Event Streams时发现问题,请查看以下已知限制和变通方法。

Java Kafka 调用不会在 Kafka 引导程序服务器发生故障时进行故障转移

问题

Java™ 虚拟机 (JVM) 高速缓存 DNS 查找。 当 JVM 解析主机名的 IP 地址时,它会在指定的时间段 (称为生存时间 (TTL)) 内高速缓存该 IP 地址。 某些 Java 配置设置 JVM TTL,以便在重新启动 JVM 之前不会刷新主机名的 IP 地址。 例如,具有安全管理器的配置。

变通方法

因为 Event Streams 使用 Kafka 引导程序服务器 URL 和多个 IP 地址实现高可用性,并不是所有代理程序 IP 地址为 Kafka 客户机所知,从而防止故障转移到正常运行的代理程序。 在这些情况下,故障转移需要代理 URL 的 IP 地址请求才能获取有效的 IP 地址。 建议您将 JVM 的 TTL 值配置为 30 到 60 秒。 此值确保如果引导程序服务器的 IP 地址有问题,那么 Kafka 客户机能够通过查询 DNS 来查找和使用新的 IP 地址。

请参阅 java.security 文件中的以下示例:

# The Java-level namelookup cache policy for successful lookups:
#
# any negative value: caching forever
# any positive value: the number of seconds to cache an address for
# zero: do not cache
#
# default value is forever (FOREVER). For security reasons, this
# caching is made forever when a security manager is set. When a security
# manager is not set, the default behavior in this implementation
# is to cache for 30 seconds.
#
# NOTE: setting this to anything other than the default value can have
#       serious security implications. Do not set it unless
#       you are sure you are not exposed to DNS spoofing attack.
#
#networkaddress.cache.ttl=-1

如何修改 JVM 的 TTL

  • 要修改所有应用程序的 JVM TTL,请在 <$JAVA_HOME>/jre/lib/security/java.security 文件中设置 networkaddress.cache.ttl 值。

  • 要修改特定应用程序的 JVM TTL,请在应用程序代码中设置 networkaddress.cache.ttl

    java.security.Security.setProperty("networkaddress.cache.ttl" , "30");
    

Java Kafka 调用可能超时

问题

有时候,Kafka Java 客户机调用无法找到 Kafka。 失败原因是 Kafka 客户机为每个引导程序服务器确定了相同的失败 IP 地址。 Kafka 客户机尝试每个代理程序的 IP 地址(是同一个故障 IP 地址),错误地认为 Kafka 已停机。 如果在 DNS 查询中返回了多个 IP 地址,那么 Kafka 客户机将使用列表中返回的第一个 IP 地址。

变通方法

在等待足够长的时间使 JVM DNS 高速缓存使代理 URL 到期之后,重试调用。 在后续 Kafka 调用时,将从 DNS 查询返回工作代理 IP 地址。

Kafka 改进建议 (KIP) #302 (可作为 Kafka 2.1.1 中的选项提供,缺省情况下包含在 2.6.0中) 可确保 Kafka 客户机尝试所有可用的代理 IP 地址而不是子集,因此单个 IP 地址中的故障不会导致故障。

您需要使用下列其中一种方法来选择此功能:

  • 在配置参数 client.dns.lookup 的“使用者”和“生产者”属性中指定新的允许值:

    client.dns.lookup: "use_all_dns_ips"
    
  • 使用常量 CommonClientConfigs.CLIENT_DNS_LOOKUP_CONFIG: ClientDnsLookup.USE_ALL_DNS_IPS

主题和分区

  • 主题名称限制为最多 200 个字符。
  • 一个主题的缺省分区数为一个。

在 Kafka 中创建和删除主题

在 Kafka 中,主题的创建和删除是异步操作,可能需要一些时间才能完成。 避免依赖快速创建和删除主题或快速删除和重新创建主题的使用模式。