KSQL User Define Functions
This is a rewrite of the
multiply KSQL user-defined function (UDF) from the Confluent documentation using Groovy with a Gradle-based build process.
Notice that the multiply function written in Groovy only has three methods, while the Java equivalent (from the Confluent documentation) requires four methods. This all has to do with Java primitives and NULL values, which the Confluent documentation does a really good job of explaining. So what's up?
We can use Groovy to compile Java libraries, but it goes about things just a little bit different. While Groovy accepts Java primitives (using
long instead of
Long, for instance), Groovy "autowraps" them in the full Object class. So long story short... there is no reason to write separate overloaded methods for primitives versus objects in Groovy. Nice, right?
One requirement of KSQL UDF JARs is that they contain all external dependencies. This sample does not contain any external dependencies, but if it did, they would be included in the JAR file because we are using the Shadow Plugin. So, to get our uber jar, instead of:
...we just do...
This will generate a JAR library with an
-all naming standard, and this will be the shaded JAR file including all dependencies.
Currently, the deployment of the UDF JAR file to the KSQL Server is being handled with Gradle code that lives elsewhere. It's a TODO to get that code represented here as well.