[ 
https://issues.apache.org/jira/browse/KAFKA-9517?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Paul Snively updated KAFKA-9517:
--------------------------------
    Description: 
The `KTable` API implemented 
[here|[https://github.com/apache/kafka/blob/2.4.0/streams/src/main/java/org/apache/kafka/streams/kstream/internals/KTableImpl.java#L842-L844]]
 calls `doJoinOnForeignKey` with an argument of `Materialized.with(null, 
null)`, as apparently do several other APIs. As the comment spanning [these 
lines|#L1098-L1099]] makes clear, the result is a `KTable` whose `valueSerde` 
(as a `KTableImpl`) is `null`. Therefore, attempts to `join` etc. on the 
resulting `KTable` fail with a `NullPointerException`.

While there is an obvious workaround—explicitly construct the required 
`Materialized` and use the APIs that take it as an argument—I have to admit I 
find the existence of public APIs with this sort of bug, particularly when the 
bug is literally documented as a comment in the source code, astonishing to the 
point of incredulity. It calls the quality and trustworthiness of Kafka Streams 
into serious question, and if a resolution is not forthcoming within a week, we 
will be left with no other option but to consider technical alternatives.

  was:
The `KTable` API implemented 
[here|[https://github.com/apache/kafka/blob/2.4.0/streams/src/main/java/org/apache/kafka/streams/kstream/internals/KTableImpl.java#L842-L844]]
 calls `doJoinOnForeignKey` with an argument of `Materialized.with(null, 
null)`, as apparently do several other APIs. As the comment spanning [these 
lines|#L1098-L1099]] makes clear, the result is a `KTable` whose `valueSerde` 
(as a `KTableImpl`) is `null`. Therefore, attempts to `join` etc. on the 
resulting `KTable` fail with a `NullPointerException`.

While there is an obvious workaround—explicitly construct the required 
`Materialized` and use the APIs that take it as an argument—I have to admit I 
find the existence of public APIs with this sort of bug, particularly when the 
bug is literally documented as a comment in the source code, astonishing to the 
point of incredulity. It calls the quality and trustworthiness of Kafka Streams 
into serious question, and if a resolution is not forthcoming within a week, we 
will be left with no other option but to consider technical alternatives.


> KTable Joins Without Materialized Argument Yield Results That Further Joins 
> NPE On
> ----------------------------------------------------------------------------------
>
>                 Key: KAFKA-9517
>                 URL: https://issues.apache.org/jira/browse/KAFKA-9517
>             Project: Kafka
>          Issue Type: Bug
>          Components: streams
>    Affects Versions: 2.4.0
>            Reporter: Paul Snively
>            Priority: Critical
>
> The `KTable` API implemented 
> [here|[https://github.com/apache/kafka/blob/2.4.0/streams/src/main/java/org/apache/kafka/streams/kstream/internals/KTableImpl.java#L842-L844]]
>  calls `doJoinOnForeignKey` with an argument of `Materialized.with(null, 
> null)`, as apparently do several other APIs. As the comment spanning [these 
> lines|#L1098-L1099]] makes clear, the result is a `KTable` whose `valueSerde` 
> (as a `KTableImpl`) is `null`. Therefore, attempts to `join` etc. on the 
> resulting `KTable` fail with a `NullPointerException`.
> While there is an obvious workaround—explicitly construct the required 
> `Materialized` and use the APIs that take it as an argument—I have to admit I 
> find the existence of public APIs with this sort of bug, particularly when 
> the bug is literally documented as a comment in the source code, astonishing 
> to the point of incredulity. It calls the quality and trustworthiness of 
> Kafka Streams into serious question, and if a resolution is not forthcoming 
> within a week, we will be left with no other option but to consider technical 
> alternatives.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to