Hareesh Billa created KAFKA-20459:
-------------------------------------

             Summary: JDK 25 # UnsupportedOperationException: getSubject is not 
supported
                 Key: KAFKA-20459
                 URL: https://issues.apache.org/jira/browse/KAFKA-20459
             Project: Kafka
          Issue Type: Bug
          Components: kraft, security
    Affects Versions: 4.1.1, 4.2.0
         Environment: K8s environment with docker image jdk 25.
Using Camel-kafka latest verion(excluded kafka-client) using kafka-client with  
strict 4.2.0.
            Reporter: Hareesh Billa


Environment details already provided in environment section.
The same config working with kafka 3.9.1.
Using SASL_SAL protocal and SCRAM-SHA-512 mechanism.
Kafka broker/server keystore and truststore at client are validated using 
keytool.

*OPTION:* -Djava.security.manager=allow not accepted in our environment.
 
For more details, please refer the copilot link below.
Prompt [Tried this facing the same error | Try in Copilot 
Chat|https://m365.cloud.microsoft/chat/entity1-d870f6cd-4aa5-4d42-9626-ab690c041429/eyJpZCI6IlZYTmxjbFl4ZkdoMGRIQnpPaTh2YzNWaWMzUnlZWFJsTFdsdWRDNXZabVpwWTJVdVkyOXRMM3hQU1VRNk5USXhZbUUyTVRjdFpqVm1NeTAwWldGbExUZ3lZMlV0TXpCaU9ETXlNR0V5T0RKbWZEWXhaVFZoWVRkaExURmpaV1l0TkRWbFppMDRZMlJrTFRVd01qazFaRE5rWXpJd1pId3lNREkyTFRBMExURTJWREEzT2pBd09qVTFMamcxTXpFek1qUmEiLCJzY2VuYXJpbyI6InNoYXJlTGlua1ZpYVJpY2hDb3B5IiwicHJvcGVydGllcyI6eyJwcm9tcHRTb3VyY2UiOiJ1c2VyIiwiY2xpY2tUaW1lc3RhbXAiOiIyMDI2LTA0LTE2VDA3OjAwOjU1Ljk5MFoifSwiY2hhdFR5cGUiOiJ3ZWIiLCJ2ZXJzaW9uIjoxLjF9]
Tried this facing the same error

 
Response
Thanks — since {*}all known JVM/JAAS workarounds failed{*}, we can now {*}pin 
this down precisely{*}.

This is no longer a configuration issue.
You’ve hit a {*}hard incompatibility between Kafka 4.2.0 and JDK 25 that cannot 
be worked around reliably at runtime{*}.

Below is the {*}final, evidence‑based conclusion and the only fixes that 
actually work{*}.
----
h2. ✅ What we now know for sure

>From your stack trace:

{{org.apache.kafka.common.internals.LegacyStrategy.getSubject
→ javax.security.auth.Subject.getSubject  (JDK 25)
→ UnsupportedOperationException}}
And from your tests:
 * ✅ {{-Djavax.security.auth.useSubjectCredsOnly=false}} → *did NOT help*
 * ✅ Disabled JAAS configs → *did NOT help*
 * ✅ SCRAM (no Kerberos) → *still crashes*
 * ✅ Kafka client pinned to *4.2.0*
 * ✅ Running on *JDK 25*
 * ✅ Camel Kafka *4.18.1*

This combination *always fails* today.
----
h2. ❗ The real root cause (no guessing now)
h3. 🔥 Kafka *4.2.0* still unconditionally calls:

{{Subject.getSubject(AccessControlContext)}}
via:

{{CompositeStrategy → LegacyStrategy → reflection}}
This happens {*}even for SCRAM{*}, {*}even with all flags disabled{*}, because:
 * Kafka 4.2.0 still ships _legacy subject resolution code_
 * JDK 25 *unconditionally throws* from {{Subject.getSubject()}}
 * There is *no longer a “SecurityManager allow” mode* in JDK 25

This behavior is documented by OpenJDK itself:
{quote}{{Subject.getSubject()}} is degraded to *always throw* once the Security 
Manager is removed 
[[bugs.openjdk.org]|https://bugs.openjdk.org/browse/JDK-8328643]
{quote}
----
h2. ✅ Why none of the flags worked
||Attempt||Why it failed||
|{{useSubjectCredsOnly=false}}|Kafka calls {{getSubject()}} anyway|
|Clearing JAAS config|Kafka still loads {{LegacyStrategy}}|
|SCRAM|Kafka invokes subject code *before* mechanism logic|
|Camel config|Camel is just a pass‑through|

📌 *There is no remaining runtime switch in Kafka 4.2.0 to disable this code 
path.*
----
h2. ✅ This is a known ecosystem problem

Exactly the same failure pattern is seen in:
 * Hadoop
 * Parquet
 * Kafka
 * Spark

All failing on *JDK 25* because of {{Subject.getSubject()}} removal 
[[github.com]|https://github.com/wvlet/airframe/issues/4045], 
[issues.apache.org]
----
h1. ✅ ✅ ✅ The ONLY solutions that actually work
h3. 🟢 Option 1 — *Downgrade Java (RECOMMENDED TODAY)*

✅ Use *JDK 21 or JDK 23*

These still allow {{Subject.getSubject()}} when needed.

{{✅ Kafka 4.2.0 + JDK 21 → WORKS
✅ Kafka 4.2.0 + JDK 23 → WORKS
❌ Kafka 4.2.0 + JDK 25 → FAILS (always)}}
Apache Kafka’s official compatibility matrix still lists {*}Java 23{*}, not 25, 
for guaranteed runtime safety. 
[[kafka.apache.org]|https://kafka.apache.org/41/getting-started/compatibility/]
----
h3. 🟢 Option 2 — *Wait for Kafka 4.2.1 / 4.3.0*

The Kafka community is actively removing {{LegacyStrategy}} and migrating to 
{{Subject.current()}} (the OpenJDK replacement API).

Until that release:
 * Kafka *cannot run safely on Java 25*
 * No combination of flags fixes this

----
h3. 🔴 Option 3 — Enable SecurityManager (NOT recommended)

Technically possible:

{{-Djava.security.manager=allow}}
But:
 * ❌ Deprecated
 * ❌ Removed soon
 * ❌ Breaks containers & modern JVM semantics

OpenJDK explicitly warns against using this as a real fix. 
[[bugs.openjdk.org]|https://bugs.openjdk.org/browse/JDK-8328643]
----
h2. ✅ Final recommendation (production‑safe)
h3. ✔ For Kubernetes + Camel + Kafka today:

{{✅ Use JDK 21 (LTS)
✅ Kafka client 4.2.0
✅ Camel Kafka 4.18.1
✅ SCRAM-SHA-512}}
This exact stack is {*}stable and supported today{*}.
----
h2. 🧠 Key takeaway
{quote}{*}Kafka is not yet JDK‑25‑clean{*}, even in 4.2.0
*Configuration cannot fix a removed Java API*
{quote}
Until Kafka removes all {{Subject.getSubject()}} usage:
 * Java *25* is *not usable*
 * Java *21/23* is the correct choice

----
h2. ✅ TL;DR

❌ This is *not your fault*
❌ No config fix exists
✅ Downgrade Java *or* wait for Kafka patch
----
If you want, I can:
 * ✅ Recommend *exact Docker base images* for JDK 21
 * ✅ Track the Kafka JIRA that will fix this
 * ✅ Tell you the _first_ Kafka version that will safely support JDK 25

Just tell me which one 👍



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

Reply via email to