News for hackers. Stuff that matters.
Re:How ksqlDB Works: Internal Architecture and Advanced Feat... by mjdrogalis on Thursday September 02, 2021 @02:07PM (#28395339)
Hey, ksqlDB contributor from Confluent here. In addition to the migration tooling that you mentioned (https://www.confluent.io/blog/easily-manage-database-migrati...), ksqlDB also supports in-place schema evolution (https://docs.ksqldb.io/en/latest/how-to-guides/update-a-runn...). There are some constraints on what kinds of evolution are supported, but it's something we're constantly chipping away at.
Re:How ksqlDB Works: Internal Architecture and Advanced Feat... by agavra on Thursday September 02, 2021 @02:27PM (#28395569)
There's a whole class of interesting problems related to query evolution - and it varies greatly depending on the "environment" that you're interested in (see mjdrogalis' docs on updating a running query). Generally, the strategy that ksqlDB takes at the moment is to validate what upgrades are possible to do in-place and which are not - for the former, ksqlDB "just does it" and for the latter, we are designing a mechanism to deploy topologies side-by-side and then atomically cut over when the new topology is caught up to the old one.

There's an in-progress blog post that describes exactly this class of problems - keep an eye out for it!

Re:How ksqlDB Works: Internal Architecture and Advanced Feat... by arman_ashrafian on Thursday September 02, 2021 @03:48PM (#28396512)
Nice I'll check it out!

I'm just going to throw out another problem since you guys are here :)

The current batch process joins some tables before sending data to elasticsearch. This means that the debezium connector doesn't write all the data I need into kafka. I was thinking I could create a materialized table in ksql with infinite retention for the other postgres tables I need to join on. Then when I stream in an update for the data I want in elasticsearch, I can join on these tables.

The issue is that a Stream-Table join only gets triggered when the stream changes. This means that when the data in the tables change we will not see these updates in elasticsearch.

I guess my only option is to join everything in our app and then produce the full message to the elastic sink topic?

Re:How ksqlDB Works: Internal Architecture and Advanced Feat... by mjdrogalis on Thursday September 02, 2021 @04:07PM (#28396722)
Is it an option to model it as a table/table join? t/t triggers when there's a change on either side of the expression.

If that doesn't work, feel free to swing by our community Slack room and we can get into the weeds. :)

Re:How ksqlDB Works: Internal Architecture and Advanced Feat... by arman_ashrafian on Thursday September 02, 2021 @04:47PM (#28397154)
Oh cool need to think about this a bit more. I’ll see you in the slack channel :)