WARN deprecation.org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6:
ConsumeKafka_2_6[id=...] [Kerberos Credentials Service] Property should be replaced with
[Kerberos User Service] Property
org.apache.nifi.deprecation.log.DeprecationException: Reference Class
[org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6] ...
프로세서가 유효성 검사를 할 때마다 나오므로 로그가 빠르게 불어난다. 동작 자체는 막히지 않지만, NiFi 2.x 에서 해당 속성과 프로세서가 함께 제거되므로 올리기 전에 정리해야 한다.
DeprecationException 이라는 이름이 붙어 있으나 실제 예외가 던져진 것이 아니다. 어디서 사용 중인지 스택으로 보여 주기 위해 만들어 넣은 것이다.
기존에는 KeytabCredentialsService 라는 컨트롤러 서비스로 principal 과 keytab 을 지정했다. 이것을 Kerberos User Service 계열로 바꾼다.
| 새 컨트롤러 서비스 | 쓰는 경우 |
|---|---|
KerberosKeytabUserService |
keytab 파일로 인증 |
KerberosPasswordUserService |
principal 과 비밀번호로 인증 |
KerberosTicketCacheUserService |
이미 발급된 티켓 캐시를 사용 |
사용자 단위로 서비스를 만들기 때문에, 여러 주체를 동시에 쓰는 구성이 깔끔해진다. 예전 방식은 JVM 전역 JAAS 설정에 얽매이는 부분이 있었다.
KerberosKeytabUserService 를 새로 만든다. Kerberos Principal 과 Kerberos Keytab 을 지정하고 활성화한다.SASL_PLAINTEXT 또는 SASL_SSL, SASL Mechanism 은 GSSAPI, Kerberos Service Name 은 대개 kafka 다.KeytabCredentialsService 를 비활성화하고 삭제한다.keytab 파일은 모든 노드의 같은 경로에 있어야 하고, NiFi 실행 계정만 읽을 수 있어야 한다.
klist -kt /opt/nifi/conf/nifi_kafka.keytab
chmod 600 /opt/nifi/conf/nifi_kafka.keytab
2.x 에는 ConsumeKafka_2_6 · PublishKafka_2_6 처럼 버전 접미사가 붙은 프로세서가 없다. ConsumeKafka · PublishKafka 하나로 정리되고, 브로커 접속 정보는 프로세서가 아니라 Kafka3ConnectionService 컨트롤러 서비스에 모인다. 부트스트랩 서버, 보안 프로토콜, SASL 설정, SSL Context Service, Kerberos User Service 가 그 서비스에 들어가고 프로세서는 토픽과 그룹만 지정한다.
여러 프로세서가 같은 브로커를 쓰면 연결 서비스를 하나만 두고 공유한다. 브로커 주소나 인증이 바뀔 때 한 곳만 고치면 되는 것이 이 구조의 장점이다.
옮길 때 확인할 속성 대응은 다음과 같다.
| 1.x 프로세서 속성 | 2.x 위치 |
|---|---|
| Kafka Brokers | Kafka3ConnectionService 의 Bootstrap Servers |
| Security Protocol · SASL Mechanism | Kafka3ConnectionService |
| SSL Context Service | Kafka3ConnectionService |
| Kerberos Credentials Service | Kerberos User Service (연결 서비스에 지정) |
| Topic Name · Group ID · Offset Reset | 프로세서에 그대로 |