Thanks.

I just had a high level thought. Not sure if this idea is good or bad, so I just wanted to put it out, to see what people think.

With the "new" PAPI, we move from KV to `Record` model. For IQ, we historically also use a KV-based design, and extended it incrementally via `ValueAndTimestamp` and most recently via `ValueTimestampHeaders`.

While we need `ValueTimestampHeaders` internally (it's the par that goes into the RocksDB value), I am wondering if it could make sense for IQv2 to also use `Record`?

If we use `Record`, we would avoid the `ValueTimestampHeaders` vs `AggregationsWithHeaders` (which also have a ts, but just stored in the RocksDB `SessionKey` object) question, and long term, we might also move to a `Record` model in the DSL. So we could align and standardize on `Record` throughout the whole API surface area in the long term?


Thoughts?


-Matthias

On 6/16/26 7:19 AM, Jess Jin via dev wrote:
Thanks Alieh! Updated in the wiki.

- Jess

On Tue, Jun 16, 2026 at 7:49 AM Alieh Saeedi via dev <[email protected]>
wrote:

Hey Jess,
I see that you agreed with some of the suggestions and design alternatives,
including the naming. Could you please:

- Update the wiki to the committed design?


- Fix the motivation wording: existing query types don't "drop" headers...

Thanks
- Alieh

On Mon, Jun 15, 2026 at 10:02 PM Jess Jin via dev <[email protected]>
wrote:

Hi Lucas,

Thanks! I agree. The new type only offers withKey(...) (single key → all
sessions for that key), so "Range" is misleading. I'll rename it to
SessionKeyWithHeadersQuery. That also keeps the "Range" name free for a
future genuine key-range session query.

- Jess

On Mon, Jun 15, 2026 at 11:03 AM Lucas Brutschy <[email protected]>
wrote:

Hi Jess,

Thanks for the KIP, and for working through the latest round with
Matthias and Bill.

LB1: For the session query, the existing IQv2 entry point is
WindowRangeQuery created via withKey(), which returns all sessions for
a single key. Is "Range" the right word when only withKey() is
offered? Seems "Range" previously referred to a range of keys, but
that range is not part of the new type anymore.

Thanks,
Lucas

On Mon, Jun 15, 2026 at 4:37 PM Jess Jin via dev <[email protected]

wrote:

Hi Bill,

Thanks for the review. I agree this needed to be nailed down.

- Jess

On Fri, Jun 12, 2026 at 2:41 PM Bill Bejeck <[email protected]>
wrote:

Hi Jess,

Thanks for the KIP.

I'd second the importance of getting the details flushed out in
Matthias's
4th comment with regards to session stores
and how we'll support `ValueTimestampeHeader` and
`AggregationWithHeaders`
and if session-header-stores are supported in this KIP.

-Bill

On Thu, Jun 11, 2026 at 8:59 PM Matthias J. Sax <[email protected]>
wrote:

Thanks for the KIP. Very nice to see that IQv2 gets more love.


Couple of comments/questions.


MJS1: The KIP says.

surfaced through the public wrapper type
ValueTimestampHeaders<V>

Yes, but session-header-store actually uses
`AggregationWithHeaders`.
Should we mention both cases? Or do we not include
session-headers
stores? Later, the KIP only mentions
`MeteredTimestampedKeyValueStoreWithHeaders` and
`MeteredTimestampedWindowStoreWithHeaders`, so maybe that's
indeed
what
is proposed? If yes, why do exclude session-header-store? Also
if,
yes,
would be good to call this out explicitly.



MJS2: The KIP says.

The existing query types — TimestampedKeyQuery,
TimestampedRangeQuery,
WindowKeyQuery, and WindowRangeQuery — all return values without
headers,
even when run against a header-aware store.

This sound as if these query types are already supported, but I
believe
they are not. Same for their timestamp-less equivalents like
`KeyQuery`.

I think it would be a good extension to the KIP, to also add
support
for
these existing query types on the newly added header-stores. We
don't
need to define any new classed. The KIP would just say, that we
extend
the kv-ts-header store to also support existing KeyQuery and
TimestampedKeyQuery (and similar for window-header-store; and
maybe
also
session-header-store, in case the KIP does include
session-header-stores)



MJS3: Question about naming. You propose to add:

   - TimestampedKeyWithHeadersQuery
   - TimestampedRangeWithHeadersQuery
   - WindowKeyWithHeadersQuery
   - WindowRangeWithHeadersQuery

But all four query types return some form of
`ValueTimestampHeaders`
results. So it seems we should align the names, and maybe call
the
later
two

   - TimestampedWindowKeyWithHeadersQuery
   - TimestampedWindowRangeWithHeadersQuery

Or, to avoid very long names, shorten the first two to

   - KeyWithHeadersQuery
   - RangeWithHeadersQuery



MJS4: About `WindowRangeWithHeadersQuery`.

First some background: The existing `WindowRangeQuery` has two
methods
how to setup the query, and depending which one is used, the
query
can
be used against either a windowed-store or a session-store, ie,
while
both are a `WindowRangeQuery`, it's technically two different
queries
for two different stores.

   - `withKey(...)` -> only supported by session stores
   - `withWindowStartRange(...)` -> only supported by window store

The KIP proposed to add both methods, too, but at the same time
says,
that window-store won't accept a query created via `withKey`
(what
in
general aligns to what we have). But the KIP seems to exclude
session-header-store support. So why would we add `withKey` at
all?
Would it not be simpler to only add the supported
`withWindowStartRange`
method?

Of course, if we want to mimic the existing query type, the
WindowRangeWithHeadersQuery seems to face the challenge that
window-header-store uses `ValueTimestampeHeader` while
session-header-stores uses `AggregationWithHeaders` type. I would
like
to understand better how this should all fit together. Also for
the
case, that we add session-header-store support later (ie, we
should
avoid to corner ourselves and ensure what we define now, is
extensible
in the future).



-Matthias



On 6/11/26 6:23 AM, Jess Jin via dev wrote:
Hey Alieh,

Thanks for the feedback! Updated in the wiki page.

- Jess

On Wed, Jun 10, 2026 at 3:26 PM Alieh Saeedi <
[email protected]

wrote:

Hey Jess,

Thanks for putting together the KIP.

A couple of small nits:

AS1: Please replace the `getX()` methods with `x()`. For
example,
`getKey()` should become `key()`. As far as I know, that’s the
usual
convention.
AS2: In the `Usage Example` section, please replace `long`
with
`Long`,
since `ValueTimestampHeaders.value` is not a primitive.

- Alieh

On Wed, Jun 10, 2026 at 7:02 PM Jess Jin via dev <
[email protected]>
wrote:

Hi all,

I'd like to start a discussion on KIP-1356: Introduce IQv2
for
headers-aware state stores. Link
<





https://urldefense.com/v3/__https://cwiki.apache.org/confluence/display/KAFKA/KIP-1356*3A*Introduce*IQv2*for*headers-aware*state*stores__;JSsrKysrKw!!Ayb5sqE7!oZFamFyZDrAmJeFHgKc-nOWUWL85bEbfHSdwgrp9jNHVOUCZgoOQ9aiK94L8zPr-tA_zx3WTmNs9vVDlqgQ$


Thanks.











Reply via email to