본문 바로가기
Data PipeLine/Kafka

[Kafka] 3.0.x Release note 주요 내용 정리

by 연습장이 2024. 2. 12.
728x90
반응형

목적

  카프카 브로커의 버전 업그레이드 시 발생할 수 있는 사이드 이펙트를 사전파악 및 대응, 신기술에 대한 도입 검토하기 위함

Release note Clause

3.0.0

Notable Changes(다른 항목과 중복될 수 있음)

  • 프로듀서의 메시지 전달이 기본적으로 강력하게 강화됨
    • idempotence가 활성화됨
    • acks 가 1 대신 all로 설정됨
  • 주키퍼가 3.6.3 버전으로 업그레이드 됨
  • Kraft 모드의 미리보기 기능이 가능함
  • 컨슈머 설정 중 session.timeout.ms의 기본값이 10초에서 45초로 증가됨
  • 브로커 설정의 log.message.format.version과 토픽 설정의 message.format.version이 만료됨. 이 두 값은 만약 inter.broker.protocol.version이 3이상이면 항상 3.0으로 설정됨
  • 2.5.0를 포함하여 이후 버전에 대해 만료된 카프카 스트림즈 API가 모두 제거됨
  • clients, connect, core 및 tools 모듈에서 많은 클래스와 메소드, 툴이 제거됨
    • kafka-topics와 kafka-reassign-partitions cli 툴에서 --zookeeper 옵션이 제거됨. 대신하여 --boostrap-server를 사용할 것
    • 클라이언트 설정 중 client.dns.lookup 파라미터가 제거됨. use_all_dns_ips가 기본적으로 사용되며 이 값을 가급적 바꾸지 않을 것을 권장함
    • partition.assignment.strategy 파라미터의 기본값이 "[RangeAssignor, CooperativeStickAssignor]"로 변경되었고 기본적으로 RangeAssignor를 사용하지만 싱글노드씩 롤링 업그레이드할 때에는 CooperativeStickyAssignor가 사용됨
    • quota.producer.default와 quota.consumer.default 파라미터가 제거됨. 대신 quota 기본값이 유동적으로 적용됨
    • port와 host.name 파라미터가 제거됨. 대신 listeners를 사용할 것
    • advertised.port와 advertised.host.name 파라미터가 제거됨. 대신 advertised.listeners 파라미터를 사용할 것
    • 만료된 워커 설정인 rest.host.name과 rest.port 파라미터가 제거됨. 대신 카프카 커넥트 워커는 listeners 파라미터를 사용할 것
  • 커넥트의 설정 중 internal.key.converter 및 internal.value.converter 파라미터가 완전히 제거됨. 이 커넥트 워커 속성은 2.0.0부터 사용되고 있지 않았음. 이제 워커는 schemas.enalbe가 false로 설정된 JSON 변환기를 사용하도록 하드코딩되어 있음
  • 최초의 미러메이커(MM1) 및 그와 관련된 클래스가 만료됨. 이제 Connect-based 미러메이커(MM2)를 사용할 것
    • MM2는 토픽의 이름을 갱신하는 것 없이 복제를 허용하는 IdntityReplicationPolicy를 지원함. DefaultReplciationPolicy가 기본적으로 사용되지만 식별 복제는 replication.polic 설정 속성에 의해 활성화됨. 이 기능은 MM1에서 MM2로 이관할 때 유용함

New Feature

  • 카프카 커넥트의 transforms에 InsertHeader와 DropHeaders를 추가함
  • fetcher로부터 파티션이 제거되었다면 replica fetcher는 분기 epoch에서 파티션 상태를 갱신하지 않음

Improvement

  • ValueJoiner 인터페이스에 조인키 추가를 고려함
  • 카프카 커넥트에서 POST /connectors/connector명/restart가 실패한 타스크를 시작하도록 개선됨
  • GetOffsetShell이 다중 토픽과 컨슈머 설정에 대한 덮어쓰기를 지원함
  • bootstrap 단계 동안 처리를 강제하는 것을 피하도록 개선함
  • 처리를 강조하기 전에 더 많은 record를 poll 함
  • default replication factor 설정을 변경함
  • RocksDB의 버전을 증가시킴
  • 카프카 스트림즈 앱에서 알고 있는 현재 타임스탬프를 검색하는 메서드를 추가함
  • 보다 포괄적인 용어를 사용할 수 있도록 코드베이스를 갱신함
  • 커넥트-분산 sample 설정 파일이 리스너에 대한 지침 문서를 포함하지 않음
  • 카프카 스트림즈가 클린업으로부터 상태 저장 디렉토리를 클린업하도록 함
  • 프로듀서는 기본적으로 EOS를 활성화하게 될 것임
  • ConnectSchema.validateValue()로부터 발생된 에러 메시지가 스키마의 이름을 포함하도록 함
  • ProduceResponse.responses를 제거함
  • 컨슈머 poll 타임아웃 만료가 INFO가 아닌 WARNING으로 로깅되도록 함
  • OffsetFetch가 다중 그룹ID를 허용하도록 요청을 확장함
  • timestamp나 duration에 의한 reset-offsets이 최신으로부터 offset과  default를 찾을 수 없을 때 컨슈머그룹에 WARN 로깅을 추가함
  • task-level 파일시스템 락을 제거함
  • 메타데이터 자동 토픽 생성에 대한 메커니즘 전송을 사용할 것을 고려함
  • default.windowed.serde.inner.class 설정에 대한 만료를 고려함
  • 해당 토픽이 존재하지 않을 경우 kafka-reassign-partitions 명령어가 더 나은 에러 메시지를 보여주도록 함
  • 카프카 스트림즈가 진행상황을 더 잘 트래킹할 수 있도록 개선함
  • 미러메이커2와 함께 offsetsync 토픽의 로케이션을 설정하는 것을 허용하도록 함
  • 생략된 ReplicaManager 메트릭 지표를 문서화함
  • 카프카 스트림즈 3.0에 대한 만료된 API를 제거함
  • 미러메이커 v1이 만료됨
  • KIP-500 모드에서 펜싱된 노드에 새로운 파티션을 할당할 수 있도록 함
  • ZSTD JNI를 1.4.8-4에서 1.4.9-1로 업그레이드함
  • 현재 카프카 클러스터 내 주어진 브로커ID가 없을 경우 kafka-log-dirs에 대한 ERROR 로깅이 추가됨
  • 제한적 sticky 할당 알고리즘이 강화됨
  • 파티션 오프셋 요청을 ConsumerGroupCommand 내 단일 요청으로 결합함
  • 기본적으로 커넥터 설정에 클라이언트를 덮어쓰기가 활성화됨
  • 기본적으로 커넥트의 커넥터 로그 contexts를 활성화함
  • 스트림즈 EOS에 대한 커밋 간격에 따라 트랜잭션 타임아웃을 조정함
  • StateDirectory 스레드 락 작업을 더 강화함
  • ListOffset이 max timestamp와 함께 offset을 가져오도록 확장함
  • ConsumerRecord/RecordMetadata 3.0의 체크섬을 제거함
  • 컨트롤러에 의해 프로듀서 ID가 발생되도록함
  • 만료된 PartitionAssignor 인터페이스를 제거함
  • 동시에 다중 코디네이터를 해결하기 위해 FindCoordinator를 갱신함
  • sticky general assignor의 확장서과 성능을 개선함
  • TaskMetadata가 plain String보다는 actual TaskId를 반환하도록 함
  • Kraft 복제본 배치를 개선함
  • KRaft 모드일 때 파티션 재할당을 지원함
  • 내부 implementation과 함께 TaskMetadata를 인터페이스로 이관하는 것을 고려함
  • 컨슈머 세션 타임아웃 기본값을 45초로 증가함
  • 컨슈머가 deserialization 예외 내에 파티션과 오프셋 숫자를 포함하도록 함
  • MirrorCheckpointTask가 토픽 필터를 닫도록 함
  • KRaft Metadata Records를 수정함
  • 일부 컨트롤러 클래스를 메타데이터 패키지로 이동함

Bug

  • 새로운 FileMessageSet이 디스크에 쓰여질 때 부모 디렉토리에 대해 fsync()가 호출되지 않는 버그가 수정됨
  • Application Reset Tool이 내부 토픽을 올바르지 못하게 삭제하는 버그가 수정됨
  • 클래스를 로딩하는 동안 카프카 커넥트에서 데드락이 발생하는 버그가 수정됨
  • SASL_SSL이 여전히 예약된 DNS 룩업을 수행하는 버그가 수정됨
  • 주키퍼에 대한 연결이 유실되면 셧다운이 블로킹 되는 버그가 수정됨
  • ISR 내 죽은 브로커가로 인해 예외적으로 isr-expiration가 실패함
  • 존재하지 않는 토픽에 레코드를 생상하려고 할 때 소스 커넥터가 영원히 행에 걸리는 것보다 에러를 보고하도록 함
  • 커넥트 캐스트가 "bytes" 타입의 필드를 제대로 다루지 못하는 버그가 수정됨
  • 널 값이 존재할 경우 Flatten SMT가 일부 필드를 누락하는 버그가 수정됨
  • ConfigDef.parseType이 데드락 걸리는 버그가 수정됨
  • FetchResponse가 꽉찼을 때 FetchSessionCache가 파티션에 대해 기아(접근 불가) 상태를 야기할 수 있음
  • refresh.topics.interval.seconds 기본 값에 대해 문서 내용이 올바르지 않는 부분이 수정됨
  • RaftReplicaManager 내 partition.metadata 파일을 생성하는 로직이 누락되는 버그가 수정됨
  • 브로커가 버퍼링된 데이터가 있는 연결이 없거나 거의 없는 유휴 커넥션을 닫지 못하는 버그가 수정됨
  • 새로운 세션 키를 쓸 때 사용할 수 없을 경우 워커가 죽을 수 있는 버그가 수정됨
  • 시작시 프로듀서 상태가 불필요하게 리빌드 되는 버그가 수정됨
  • ProducerPerformance 내 무작위 payload가 올바르게 동작하지 못한 버그가 수정됨
  • HWM가 시작되기 전에 LeaderChange 메시지가 커밋되지 못한 버그가 수정됨
  • failure가 추가된 후에 오프셋 커밋 센서가 갱신되는 버그가 수정됨
  • raftCluster가 잘못된 활성 컨트롤러를 전송하고 갱신하지 않는 버그가 수정됨
  • 성공적으로 선출된 파티션 목록에 의해 유효한 파티션 목록이 잘못 대체되는 버그가 수정됨
  • AlterIsr 응답 핸들링 내에 경쟁 상태가 발생하는 버그가 수정됨
  • 오프셋이 읽어질 때 TaskMetadata endOffsets이 갱신되지 않는 버그가 수정됨
  • AutoTopicCreationManager가 응답 에러를 제대로 처리하지 못하는 버그가 수정됨
  • chroot를 사용함에도 불구하고 카프카가 ZK 루트 접근을 요구하는 버그가 수정됨
  • flushing 상태에서 RecordAccumulator가 멈추는 버그가 수정됨
  • 'CompletingRebalance' 내에서 컨슈머 그룹이 멈추는 버그가 수정됨
  • 싱글 브로커 클러스터에서 다중 파티션과 함께 KRaft 컨트롤러가 토픽을 생성하지 못하는 버그가 수정됨
  • 커넥트의 유요한 REST 엔드포인트가 잘못된 timeout을 사용하는 버그가 수정됨
  • 카프카 3.0 버전에서 port, host.name 및 그와 관계된 설정을 제거함
  • OffsetOutOfRange가 리더의 시작 오프셋보다 낮은 오프셋을 가져올 경우 epoch 동기화에 대해 올바르게 처리하지 못하는 버그가 수정됨
  • 롤링 업그레이드하는 동안 FindCoordinators batching이 컨슈머를 고장낼 수 있는 버그가 수정됨
  • 다수의 브로커 RPCs가 KRaft 모드에서 활성화할 수 없는 버그가 수정됨
  • 'AlterConsumergroupOffsetsHandler'가 파티션 에러를 올바르게 처리하지 못하는 버그가 수정됨
  • Fetch 스냅샷 요청이 컨트롤러 내 kraft로 향하지 않는 버그가 수정됨
  • 메타데이터 로그 디렉토리에서 스냅샷을 복구할 때 '그런 파일이 없다'는 예외가 발생하는 버그가 수정됨
  • 트랜잭션ID가 만료될 때 메시지가 너무 크다는 에러가 발생하는 버그가 수정됨
  • KRaft 컨트롤러 지표 MBean 이름이 잘못 인용된 것을 수정함
  • 비동기화 epoch가 있을 경우 리더가 팔로우의 fetch offset을 갱신하지 못하는 버그가 수정됨
  • KRaft 컨트롤러에 대한 메타데이터 엔드포인트를 활성활 수 없는 버그가 수정됨
  • KRaft 내에 파티션 변화가 있을 경우 팔로우, 리더, ISR 상태가 갱신되지 않는 버그가 수정됨
  • 의도한 셧다운 동안 KRaft 브로커가 즉시 하트비트를 보내지 않는 버그가 수정됨
  • KRaft 컨틀롤러가 브로커 만료를 동시에 올바르게 처리할 수 없는 버그가 수정됨
  • 컨슈머가 연결을 끊을 때 group 상태를 리셋하는 버그가 수정됨
  • BrokerState 메트릭이 KRaft 클러스터에 대해 동작하지 않는 버그가 수정됨
  • fetcher로부터 파티션이 제거된 후에도 'InitialFetchState'가 생성되지 않는 버그가 수정됨
  • 카프카가 주키퍼에 연결 실패 후 영원히 재시도만 하는 버그가 수정됨

Task

  • 'kafka-preferred-replica-election' 명령어가 만료되어 삭제함
  • PartitionAssignorAdatper와 만료된 PartitionAssignor 인터페이스를 제거함
  • 타스크 유휴 처리를 개선함
  • 커넥트 워커에 만료된 rest.host.name과 rest.port 속성을 제거함
  • 만료된 보안 클래스/메서드를 제거함
  • 3.0에 대한 클라이언트 메서드 중 다양한 만료 메서드를 제거함
  • 만료된 Admin.electPreferredLeaders를 제거함
  • 쉘 커맨드 내에 --zookeeper가 만료되어 제거함
  • 만료된 SimpleAclAuthorizer를 제거함
  • 만료된 LogConfig.Compact를 제거함
  • 클라이언트 설정 중 'client.dns.lookup'에 대한 기본값 'default'를 제거함
  • 내부 컨버터 설정 속성을 제거함
  • CVE-2021-26291 보안 취약점을 해결하고자 maven-artifact 의존성을 업그레이드 함
  • 토픽 삭제 call의 UNSUPPORTED_VERSION 에러를 제거함
  • KRaft 내 정책 설정을 허용하지 않음

Test

  • 한번 이상  요청이 나타난 동일한 그룹에 대해 배치처리된 OffsetFetch 요청에 대한 테스트가 추가됨

Sub-task

  • PartitionGrouper 인터페이스와 이것의 설정을 제거하고 DefaultPartitionGrouper를 내부 패키지로 옮김
  • DescribeTransactions API를 구현함
  • ListTransactions API를 구현함
  • QuorumController 메타데이터 스냅샷을 구현함
  • ApiVersionManager가 요청 버전을 기반으로 응답을 생성하도록 함
  • topicCommands, ResassignPartitionsCommands, ConfigCommand 내 --zookeeper 명령어가 만료되어 제거함
  • 메타데이터 스냅샷에 대한 시스템 테스트를 생성함
  • 카프카 3.0 버전에서 기본 할당자로 "range, cooperative-sticky"로 지정함

3.0.1

Notable Changes

  • 프로듀서에 대한 Idempotence 기능이 다른 기능과 충돌하지 않는다면 기본적으로 활성화됨

New Feature

  • -

Improvement

  • KafkaConsumer.endOffsets에 대해 사용자의 default.api.timeout.ms 설정이 기본 타임아웃 값으로 설정됨
  • asks/retires/max.in.flight 설정이 충돌할 때 idempotent 프로듀서가 비활성화됨

Bug

  • 널 값과 스키마를 가진 레코드에 대해 SetChemaMetadata SMT가 실패하는 버그가 수정됨
  • 커넥터에 타스크가 생성될수 없는 버그가 수정됨
  • 높은 처리량을 가진 소스 타스크가 커밋 offsets에 실패하는 버그가 수정됨
  • 싱크 커넥터가 협력적인 컨슈머 리밸런스 프로토콜과 동작하지 않는 버그가 수정됨
  • 프로듀스 요청을 처리할 때 record==null에 대한 널 포인터 예외가 발생하는 버그가 수정됨
  • 완전히 시작되어도 'TransactionalMessageCopier.start_node'가 처리될때까지 기다리는 버그가 수정됨
  • kafka-topics.sh --create 명령어가 파티션/replication-factor 인자를 요구하지 않는 버그가 수정됨
  • 할당 검증이 실패해서 협력적인 sticky 할당자가 멈추는 버그가 수정됨
  • ZooKeeperClient 검증이 실패한 후에 KafkaController가 활성 컨트롤러로 기능하던게 멈추는 버그가 수정됨
  • 모든 레코드가 flush되기 전에 소스 타스크의 End-of-life 오프셋 커밋이 발생할 수 있는 버그가 수정됨
  • 부분적인 컨슈머 해지 후에 토픽 파티션에 대한 마지막으로 커밋된 오프셋의 추적을 커넥트가 잃어버릴 수 있는 버그가 수정됨
  • 토픽이 삭제(그리고 자동삭제)될 경우 프로듀서가 복구에 실패하는 버그가 수정됨
  • 주키퍼와의 연결문제로 카프카 브로커가 중지되는 동안 데드락이 발생하는 버그가 수정됨
  • 취약한 의존성을 업그레이드함
  • 이를 명시적으로 설정하지 않은 경우 idempotence 프러듀서가 기본적으로 활성화되지 않는 버그가 수정됨
  • 그룹이 잠깐동안 커밋하지 않았던 동안 커밋된 오프셋이 리밸런스동안 삭제될 수 있었던 버그가 수정됨

Task

  • -

Test

  • -

Sub-task

  • -

3.0.2

Notable Changes

  • -

New Feature

  • -

Improvement

  • -

Bug

  • TransactionManager 내 프러듀서 배치가 조용히 유실되는 버그가 수정됨
  • 데이터 키가 마커 키와 충돌할 경우 Transaction marker가 클린되는 동안 유실될 수 있는 버그가 수정됨
  • [KAFKA-13794] - Producer batch lost silently in TransactionManager

Task

  • -

Test

  • -

Sub-task

  • -

참고

 
728x90
반응형