Ramachandran Krishnan created ATLAS-5336:
--------------------------------------------

             Summary:  Upgrade Kafka to 3.9.1; embedded notification broker 
uses KRaft (no ZooKeeper))
                 Key: ATLAS-5336
                 URL: https://issues.apache.org/jira/browse/ATLAS-5336
             Project: Atlas
          Issue Type: Task
          Components:  atlas-core
            Reporter: Ramachandran Krishnan
            Assignee: Ramachandran Krishnan
             Fix For: 3.0.0


h3. Summary

Upgrade Apache Atlas notification Kafka from *2.8.2* (Scala 2.12) to *3.9.1* 
(Scala 2.13), and replace the ZooKeeper-based in-process embedded broker with a 
*KRaft* broker via {{{}KafkaClusterTestKit{}}}.
h3. Background / Motivation
 * Kafka 2.8.x clients are only partially compatible with modern 3.9.x / 4.x 
brokers.
 * The legacy {{EmbeddedKafkaServer}} started an in-process {{ZooKeeperServer}} 
plus {{KafkaServer}} tied to ZK — unnecessary complexity and a maintenance 
burden as Kafka moves to KRaft-only.
 * Atlas remains on Spring 5.3; Spring Kafka 3.x / {{EmbeddedKafkaKraftBroker}} 
requires Spring 6. Using Kafka's {{KafkaClusterTestKit}} provides the same 
KRaft engine without a Spring upgrade.
 * Aligns Atlas with Kafka 3.9.x before external cluster KRaft migration and a 
future Kafka 4.x path.

h3. Proposed Changes
||Area||Before||After||
|{{kafka.version}} (root {{{}pom.xml{}}})|2.8.2|*3.9.1*|
|{{kafka.scala.binary.version}}|2.12|*2.13*|
|{{EmbeddedKafkaServer}}|In-process ZK + 
{{KafkaServer}}|{{KafkaClusterTestKit}} (combined KRaft controller+broker)|
|Embedded ZK for notification|Required at Atlas startup when 
embedded=true|*Removed* — no {{ZooKeeperServer}} / {{zookeeper.connect}} in 
embedded path|
|Docker {{atlas-kafka}} image|{{kafka_2.12-*}} tarball|{{kafka_2.13-3.9.1}} 
({{{}.env{}}}, {{{}Dockerfile.atlas-kafka{}}}, {{{}download-archives.sh{}}})|
|Default distro config|ZK-oriented embedded 
settings|{{{}atlas.notification.embedded=true{}}}; {{bootstrap.servers}} 
placeholder updated *at runtime* by {{EmbeddedKafkaServer}}|
h3. Core code — {{EmbeddedKafkaServer}}

*Path:* 
{{notification/src/main/java/org/apache/atlas/kafka/EmbeddedKafkaServer.java}}

When {{{}atlas.notification.embedded=true{}}}:
 # Start KRaft broker via {{KafkaClusterTestKit}} (1 combined controller+broker 
node).
 # Assign ephemeral {{bootstrap.servers}} (e.g. {{{}localhost:40111{}}}).
 # Write live bootstrap URL into {{atlas.kafka.bootstrap.servers}} so 
{{KafkaNotification}} clients connect.

When {{{}atlas.notification.embedded=false{}}}: no-op.

*Removed (old 2.8 embedded path):*
 * {{{}startZk(){}}}, {{{}ZooKeeperServer{}}}, {{ServerCnxnFactory}}
 * Direct {{kafka.server.KafkaServer}} construction tied to ZK
 * Port-kill retry loops for fixed ZK/Kafka ports

h3.  
h3. Acceptance Criteria
 * {{kafka.version}} is 3.9.1 and Scala binary version is 2.13 across build.
 * {{EmbeddedKafkaServer}} starts KRaft broker without ZooKeeper when 
{{{}atlas.notification.embedded=true{}}}.
 * {{atlas.kafka.bootstrap.servers}} is rewritten at runtime to the live 
embedded broker address.
 * Unit tests pass:
 ** {{KafkaNotificationTest}} (notification module)
 ** {{NotificationHookConsumerKafkaTest}} (webapp, with {{{}-am{}}})
 * Manual: Atlas docker container with {{atlas.notification.embedded=true}} — 
KRaft log lines present, REST {{/api/atlas/admin/version}} returns 200.
 * Manual: Coexist stack with external {{atlas-kafka}} 3.9.1 — Hive hook → 
Atlas, PII classification → TagSync → Ranger, Hive/Kafka audit paths work.




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to