Wednesday, February 12, 2020

Confluent KSQL Workshop in Saint Louis

Recently Confluent and World Wide Technology held a hands-on workshop on Stream Processing with KSQL. Nick Dearden, from Confluent, led the training and did an excellent job.  He gave a very clear introduction to the problem space, and the role that KSQL plays.

Then we launched into the hands-on lab.  Wow!  I have never been to a hands-on that was so smooth.

There were 50 students in the rooms and each of us had a pre-assigned AWS user account, with which we could ssh into a server running KSQL and MySQL.  There was a data generator running, I believe using the Kafka Connect Datagen connector (though I  could be wrong on that).  So, everything was ready to go and we were all working through the exercises within minutes.

Along the way, if anyone got stuck, Brian Likosar and Cliff Gilmore were on hand to help out.  From what I could see, nobody was stuck for long.

The exercises were simple, yet detailed enough to show some of the cool features of KSQL. I had seen several video demos of KSQL before, but this was my first time trying it out.  It was pretty fun.

For me the highlight—beyond just being in a room with so much Kafka brainpower—was when we ran  explain on one of the queries we had written, and lo and behold, there's the KStream topology!  I guess I should have figured this, but it was still cool to see.  KSQL is basically a really slick Kafka Streams app.

So, the workshop was fun and informative, and KSQL is a pretty powerful tool, especially for those who are not living in the JVM. But the real take-away, for me, was that the Kafka Streams API is amazing!

Tuesday, February 11, 2020

Spock: Expect two calls from one method with specific results.

This is probably nothing new to many people, but it was a very pleasant surprise to me, so I'm posting here in case there are others as clueless as I. 

Here's the situation. I've got a method under test, in Spock. (Yay! Groovy!) There is a mocked class that has a method that will be called twice, so we want to expect that, and we need to specify the return results because they are used by the method under test. In some scenarios, the expected params are known and easy to construct in the test, like a String literal. This is the easy one.

However, in some scenarios, the expected params are more difficult to construct in the test code, and I still want to expect the two calls in a specific order and with specific return values—which, again, are used downstream.

This is where I was stumped.  My very limited Spock skills came back to haunt me, and Google failed to hide my ignorance. No worries: I'm working on a project with the brilliant (and helpful) developers from Object Partners, and Neal Buesing came up with this little gem.

Needless to say, it worked like a charm, and kept me from cluttering up the test with a ton of code to construct the complex objects that would have been needed.

So, if you're reading and didn't know about this trick, tuck it away for later, and you won't have to admit to the world that you were stumped.

Friday, February 7, 2020

Pass me another cup of Kafka Kool-Aid

Ok, I admit it.  I have thoroughly imbibed the event-driven Kool-Aid.

It all started with a new job. This new job would involve Java development (I miss Groovy), and we were going to be using something called "Kafka". So, before the job began, I started looking into Kafka. I soon made the connection that my good friend, Tim Berglund, works for the company founded by the creators of Kafka, Confluent.  Tim and his colleagues have produced a seemingly endless supply of resources to help people like me understand this amazing new world. (Hmm... I wonder if there is a name for a barista who makes Kool-Aid instead of coffee?)

Anyhow, after watching several of the short Confluent videos, I graduated to conference recordings from Kafka Summit. Wow!  It was like I'd reached the Kool-Aid bottling plant! So much good information by such good presenters. I can't wait to attend one of these in person!

Then the job started.  To my surprise, I found that I'd be working with consultants from Object Partners.  I was familiar with OPI (as we affectionately call them) from the good ol' days of Grails, so it was great to know that they were also working in this amazing space.  I guess someone at OPI knows how to pick great technologies!

The team from OPI has been a tremendous help and encouraged me to dive right in.  So, I have.  I'm currently working on my first Kafka Streams story, and having a blast!

There are so many other great resources and friendly, helpful, and brilliant people that I could talk about. I hope to write more here, as I continue to learn and enjoy this refreshing beverage.  For now, I'll just pour another cup and get back to coding.