Event Streams 에 대해 알려진 제한사항

Event Streams을(를) 사용하는 동안 문제점이 발견되면 다음과 같은 알려진 제한사항 및 문제 해결 방법을 검토하십시오.

Kafka 부트스트랩 서버가 실패하는 경우 Java Kafka 호출은 장애 복구를 수행하지 않음

문제

JVM(Java™ Virtual Machine)이 DNS 검색을 캐싱합니다. JVM이 호스트 이름의 IP 주소를 분석할 때, TTL(Time to Live)이라고 하는 지정된 기간 동안 IP 주소를 캐싱합니다. 일부 Java 구성에서는 JVM이 다시 시작될 때까지 호스트 이름의 IP 주소를 새로 고치지 않도록 JVM TTL을 설정합니다. 구성 예제는 보안 관리자가 있는 구성입니다.

임시 해결책

Event Streams가 고가용성을 위해 여러 IP 주소가 포함된 Kafka 부트스트랩 서버 URL을 사용하므로, 모든 브로커 IP 주소는 Kafka 클라이언트에 알려져 있지 않습니다. 이에 따라 작동 중인 브로커에 대한 장애 복구가 발생하지 않습니다. 이러한 경우, 장애 복구를 수행하려면 브로커 URL이 작동하는 IP 주소를 가져오기 위해 IP 주소를 다시 입력해야 합니다. 30 - 60초의 TTL 값으로 JVM을 구성하는 것이 좋습니다. 이 값은 부트스트랩 서버의 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가 작동 중지되도록 잘못 결정합니다. Kafka 클라이언트에서는 DNS 쿼리를 통해 다중 IP 주소를 리턴하는 경우 목록에 리턴되는 첫 번째 IP 주소를 사용합니다.

임시 해결책

브로커 URL이 만기될 때까지 JVM DNS 캐시를 충분히 기다린 후 호출을 재시도하십시오. 후속 Kafka 호출에서 작동 중인 브로커 IP 주소가 DNS 조회에서 리턴됩니다.

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에서 토픽 작성 및 삭제는 비동기 작업으로 완료하는 데 약간의 시간이 소요될 수 있습니다. 토픽의 신속한 작성 및 삭제 또는 토픽의 신속한 삭제 및 재작성에 따라 달라지는 사용 패턴을 피하십시오.