c-broggy opened a new issue, #39789:
URL: https://github.com/apache/beam/issues/39789

   ### What happened?
   
   # Title
   KafkaIO OAUTHBEARER auth against GCP Managed Service for Apache Kafka broken 
starting 2.69.0 (works on 2.68.0)
   
   # Body
   
   ## What happened
   
   Using Python `ReadFromKafka` with `sasl.mechanism=OAUTHBEARER` and
   
`sasl.login.callback.handler.class=com.google.cloud.hosted.kafka.auth.GcpLoginCallbackHandler`
   to connect to **GCP Managed Service for Apache Kafka** from a Dataflow 
streaming job
   (`DataflowRunner`, `--experiments=use_runner_v2`), the Kafka consumer fails 
100% of
   connection attempts with:
   
   ```
   org.apache.kafka.common.errors.TimeoutException: Timeout expired while 
fetching topic metadata
     at 
org.apache.beam.sdk.io.kafka.KafkaIO$Read$GenerateKafkaSourceDescriptor...
   ```
   
   with worker logs showing, for every connection attempt:
   
   ```
   [Consumer clientId=..., groupId=...] Connection to node -1 (<broker>:9092) 
terminated
   during authentication. This may happen due to any of the following reasons:
   (1) Firewall blocking Kafka TLS traffic (eg it may only allow HTTPS traffic),
   (2) Transient network issue.
   ```
   
   This is **not** a network/firewall issue — same 
VPC/subnetwork/service-account/broker
   worked correctly on Beam 2.68.0 and earlier.
   
   ## Bisection result
   
   Tested directly against a live GCP Managed Kafka cluster (Dataflow, 
`DataflowRunner`,
   identical pipeline code, identical JDK build (`17.0.18+8-Debian-1deb12u1`, 
controlled via
   a pinned custom SDK container image so the JDK is not a variable), identical
   `kafka-clients` (3.9.0) and identical `GcpLoginCallbackHandler.class` 
bytecode
   (SHA256-verified) across every version tested:
   
   | Beam version | Result |
   |---|---|
   | 2.67.0 | ✅ Works |
   | 2.68.0 | ✅ Works (confirmed live data flowing) |
   | **2.69.0** | ❌ **Fails** — 100% auth termination |
   | 2.71.0 | ❌ Fails |
   | 2.75.0 | ❌ Fails |
   
   The break happens exactly between the **2.68.0 → 2.69.0** release.
   
   ## Dependency diff, 2.68.0 → 2.69.0
   
   Diffing every `META-INF/maven/*/pom.properties` entry bundled in
   `beam-sdks-java-io-expansion-service-{2.68.0,2.69.0}.jar`, after excluding
   unrelated file-format IO connectors (ORC/Parquet/JTS, bundled in the same
   shadowJar but irrelevant to Kafka), the changes touching the HTTP/auth path 
are:
   
   ```
   org.apache.httpcomponents.client5:httpclient5   5.4.3 -> 5.5
   io.confluent:kafka-schema-registry-client       7.6.1 -> 7.5.5   (downgrade)
   io.confluent:common-utils                       7.6.1 -> 7.5.5   (downgrade)
   net.bytebuddy:byte-buddy                        1.14.12 -> 1.17.7
   ```
   
   `google-auth-library-oauth2-http` and `google-auth-library-credentials` are
   **unchanged** across this specific boundary (both `1.37.1` / `1.30.0`), so 
this
   looks like a transport-layer (`httpclient5`) or Confluent 
schema-registry-client
   regression rather than a `google-auth-library` version bump, despite
   `google-auth-library-oauth2-http` moving significantly (1.36.0 → 1.47.0) 
across
   the wider 2.67.0 → 2.75.0 range.
   
   ## What's been ruled out
   
   - `kafka-clients` version: identical (3.9.0) at every version tested
   - `GcpLoginCallbackHandler.class`: byte-identical (SHA256-verified) at every 
version tested
   - `managed-kafka-auth-login-handler` (Google's own artifact): identical, 
`1.0.5`
   - JDK patch version: identical (`17.0.18+8-Debian-1deb12u1`), controlled via 
a pinned
     custom SDK container image built via multi-stage `COPY` from a known-good 
image,
     ruling out JDK/TLS-default drift as a factor
   - Network/firewall/subnetwork/service account/IAM: identical config across 
all tests;
     ruled out because the *same* infra with only the Beam SDK version changed 
reproduces
     the failure deterministically
   
   ## Environment
   
   - Runner: `DataflowRunner`, `--experiments=use_runner_v2`,
     `--dataflow_service_options=streaming_mode_at_least_once`
   - SDK: Python 3.12, `apache-beam[gcp]`
   - Kafka: GCP Managed Service for Apache Kafka, `SASL_SSL` + `OAUTHBEARER`
   - Auth: `com.google.cloud.hosted.kafka.auth.GcpLoginCallbackHandler` 
(Application
     Default Credentials via the pipeline's attached service account)
   
   ## Reproduction
   
   Minimal `consumer_config` used:
   
   ```python
   {
       "bootstrap.servers": "<managed-kafka-bootstrap>:9092",
       "security.protocol": "SASL_SSL",
       "sasl.mechanism": "OAUTHBEARER",
       "sasl.login.callback.handler.class": 
"com.google.cloud.hosted.kafka.auth.GcpLoginCallbackHandler",
       "sasl.jaas.config": 
"org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required;",
   }
   ```
   
   Passed to `ReadFromKafka(consumer_config=consumer_config, topics=[...])` in a
   streaming pipeline submitted with `--sdk_container_image` pinned to a custom 
image
   per Beam version tested (JDK controlled/identical across all).
   
   Happy to share the full bisection harness (build + throwaway-consumer-group 
test
   script) if useful for reproducing this quickly across future release 
candidates.
   
   
   ### Issue Priority
   
   Priority: 2 (default / most bugs should be filed as P2)
   
   ### Issue Components
   
   - [ ] Component: Python SDK
   - [ ] Component: Java SDK
   - [ ] Component: Go SDK
   - [ ] Component: Typescript SDK
   - [ ] Component: IO connector
   - [ ] Component: Beam YAML
   - [ ] Component: Beam examples
   - [ ] Component: Beam playground
   - [ ] Component: Beam katas
   - [ ] Component: Website
   - [ ] Component: Infrastructure
   - [ ] Component: Spark Runner
   - [ ] Component: Flink Runner
   - [ ] Component: Prism Runner
   - [ ] Component: Twister2 Runner
   - [ ] Component: Hazelcast Jet Runner
   - [x] Component: Google Cloud Dataflow Runner


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to