5 Kubernetes Tools You Probably Don't Use (But You Should)

TL;DR In this post, I’m going to talk about few tools that I found very useful during my Kubernetes development and presentations. Table 1. Revisions history Version Date Comments v1.1 03/26/2019 Finished draft v1.0 03/11/2019 Initial draft Earlier this year, I recorded a three-episode series, «Streaming on Kubernetes: It doesn’t have to be the hard way.» There I showed some demos of the Confluent Operator on Kubernetes. Many people reached out after and asked - «What kind of terminal do you use,» «What kind of plugins do you use» and so far and so on. And today, I’m going to be talking about five Kubernetes tools that I use in my demos (of during preparations to it) that you’re probably don’t use but defiantly should. ...

March 26, 2020 · 5 min · Viktor Gamov

The Ultimate Oracle Code One 2019 Guide for Kafka and Stream Processing wisdom seekers

TL;DR Oracle Code One 2019 is upon us! Read this post to find all sessions where you can learn things Apache Kafka® and stream processing! Also, I will be listing very subjective personal recommendations. Don’t hesitate to reach-out if you would like me to add any details! Table 1. Revisions history Version Date Comments v1.0 9/16/2019 Initial revision Monday Apache Kafka Versus Integration Middleware (MQ, ETL, ESB): Friends or Enemies? [DEV1187] by Kai Waehner 09:00 AM - 09:45 AM | Moscone South - Room 302 Getting Started with Kafka [DEV2417] Nikhil Nanivadekar 12:30 PM - 01:15 PM | Moscone South - Room 207/208 Building Event-Driven Applications with Oracle’s Fn Project and Apache Kafka [DEV1917] 01:30 PM - 02:15 PM | Moscone South - Room 304 Building Reactive Pipelines: How to Go from Scalable Apps to Scalable Systems [DEV1256] by Mark Heckler 12:30 PM - 01:15 PM | Moscone South - Room 207/208 Streaming Machine Learning with Python, Jupyter, TensorFlow, Apache Kafka, and KSQL [DEV1185] 04:00 PM - 04:45 PM | Moscone South - Room 201 Query and Analyze Kafka Streams with Oracle SQL [DEV4292] 05:00 PM - 05:45 PM | Moscone South - Room 204 ...

September 16, 2019 · 5 min · Viktor Gamov

Stream Processing Like You Have Never Seen Before

TL;DR This is playbook for «Stream Processing like you have never seen before» talk Full source code is available Table 1. Revisions history Version Date Comments v1.1 11/05/2019 Updated version, presented at NYC Cloud Native meetup v1.0 09/05/2019 Initial revision, presented at DC Spring Meetup Spring Kafka Application Getting started Go to https://start.spring.io and generate project using «Spring for Apache Kafka», «Spring for Apache Kafka Streams», «Lombok», «Cloud Streams» Add dependencies build.gradle buildscript { repositories { jcenter() } dependencies { classpath 'com.commercehub.gradle.plugin:gradle-avro-plugin:0.15.1' } } repositories { jcenter() maven { url 'http://packages.confluent.io/maven' } } dependencies { implementation 'org.apache.avro:avro:1.8.2' implementation 'org.apache.kafka:kafka-streams:2.2.0' implementation 'io.confluent:kafka-streams-avro-serde:5.2.0' } apply plugin: 'com.commercehub.gradle.plugin.avro' apply plugin: 'idea' Add Avro schemas Place avro schema files in src/main/avro movie.avsc { "namespace": "io.confluent.demo", "type": "record", "name": "Movie", "fields": [ { "name": "movie_id", "type": "long" }, { "name": "title", "type": "string" }, { "name": "release_year", "type": "int" }, { "name": "country", "type": "string" }, { "name": "genres", "type": { "type": "array", "items": "string" } }, { "name": "actors", "type": { "type": "array", "items": "string" } }, { "name": "directors", "type": { "type": "array", "items": "string" } }, { "name": "composers", "type": { "type": "array", "items": "string" } }, { "name": "screenwriters", "type": { "type": "array", "items": "string" } }, { "name": "cinematographer", "type": "string" }, { "name": "production_companies", "type": { "type": "array", "items": "string" } } ] } Add ratings schema rating.avsc { "namespace": "io.confluent.demo", "type": "record", "name": "Rating", "fields": [ { "name": "movie_id", "type": "long" }, { "name": "rating", "type": "double" } ] } Add Parser KafkaApplication class Parser { private static List<String> parseArray(String text) { return Collections.list(new StringTokenizer(text, "|")).stream() .map(token -> (String) token) .collect(Collectors.toList()); } public static Movie parseMovie(String text) { String[] tokens = text.split("\\:\\:"); String id = tokens[0]; String title = tokens[1]; String releaseYear = tokens[2]; String country = tokens[4]; String genres = tokens[7]; String actors = tokens[8]; String directors = tokens[9]; String composers = tokens[10]; String screenwriters = tokens[11]; String cinematographer = tokens[12]; String productionCompanies = ""; if (tokens.length > 13) { productionCompanies = tokens[13]; } Movie movie = new Movie(); movie.setMovieId(Long.parseLong(id)); movie.setTitle(title); movie.setReleaseYear(Integer.parseInt(releaseYear)); movie.setCountry(country); movie.setGenres(Parser.parseArray(genres)); movie.setActors(Parser.parseArray(actors)); movie.setDirectors(Parser.parseArray(directors)); movie.setComposers(Parser.parseArray(composers)); movie.setScreenwriters(Parser.parseArray(screenwriters)); movie.setCinematographer(cinematographer); movie.setProductionCompanies(Parser.parseArray(productionCompanies)); return movie; } } Add Producer class KafkaApplication.java @Log4j2 @Component @RequiredArgsConstructor class Producer { private static final String MOVIES_TOPIC = "movies"; private static final String RATINGS_TOPIC = "ratings"; private final KafkaTemplate kafkaTemplate; @Value(value = "classpath:movies.dat") private Resource moviesFile; @EventListener(ApplicationStartedEvent.class) public void process() throws InterruptedException { try (Stream<String> stream = Files.lines(Paths.get(moviesFile.getURI()))) { stream.forEach(s -> { Movie movie = Parser.parseMovie(s); log.info("sending " + movie.getMovieId() + " for movie " + movie.toString() + " to " + MOVIES_TOPIC); kafkaTemplate.send(MOVIES_TOPIC, movie.getMovieId(), movie); }); } catch (IOException e) { e.printStackTrace(); } Random ran = new Random(); while (true) { int movieId = ran.nextInt(920) + 1; int rating = 5 + ran.nextInt(6); Rating rat = new Rating((long) movieId, (double) rating); log.info(rat.toString()); Thread.sleep(1_000); this.kafkaTemplate.send(RATINGS_TOPIC, rat.getMovieId(), rat); } } } Create topics KafkaApplication.java @SpringBootApplication public class KafkaApplication { public static void main(String[] args) { SpringApplication.run(KafkaApplication.class, args); } @Bean NewTopic ratingsTopic() { return new NewTopic(Producer.MOVIES_TOPIC, 1, (short) 1); } @Bean NewTopic moviesTopic() { return new NewTopic(Producer.RATINGS_TOPIC, 1, (short) 1); } } Test locally terminal confluent local destroy confluent local start schema-registry kafka-topics --list --bootstrap-server localhost:9092 confluent local consume movies -- --value-format avro --from-beginning confluent local consume ratings -- --value-format avro ...

September 5, 2019 · 4 min · Viktor Gamov

Where in the world is Viktor in second half of 2019

TL;DR This blog post inspired by similar posts of my colleagues' @rmoff [1] and @riferrei [2]. You can find all my speaking appearances until the end of 2019. Table 1. Revisions history Version Date Comments v1.1 10/03/2019 Added New York events v1.0 9/05/2019 Initial revision September 🇺🇸 5th of September: Washington, DC — DC Spring Framework I will be talking about integration between Kafka and SpringFramework. And I will try to live code! 🗽 10th of September: New York, NY — Building Smarter Applications with Streaming Data Pipelines I will be there but not going to speak there. 🌉 17th-19th of September: San Francisco, CA — OracleCode One 2019 I will have three sessions around things Kafka and DevOps Bringing Observability to Your Stream Processing [DEV4980] Monitor Kafka Like a Pro [DEV4981] DevOps Theory Versus Practice: A Song of Ice and Tire Fire [DEV5710] (together with @jbaruch) I will spend the rest of that week at Confluent HQ 🗽 24th and 26th of September: New York, NY - Strata I will be teaching some stream processing with KSQL: Real-time SQL stream processing at scale with Apache Kafka and KSQL Also, I will be demo some cool stuff with GCP and Confluent Operator at Google Cloud Platform booth! Stop by and say hi! ...

September 3, 2019 · 3 min · Viktor Gamov

Quick Tips on Designing Your Kafka Summit Presentation

TL;DR Do yourself a favor and grab a copy of «Presentation Patterns» book by Neal Ford, Matthew McCullough, Nathaniel Schutta and should be good to go and crush your next tech presentation. Table 1. Revisions history Version Date Comments v1.0 103/15/2019 Initial revision Preface Kafka Summit 2019 events are in full throttle. New York event is happening in a couple weeks. London event is happening shortly after that in May. And San Francisco Kafka Summit is open for speaker’s proposals. My DevX team at Confluent assisted with reviewing proposals. And now we’re helping many speakers with their decks. ...

March 15, 2019 · 5 min · Viktor Gamov

Tips And Tricks That I use in my demos and presentation with Docker

A very small tip for you! TLDR the Sole purpose of this post is to help me to return here time to time if I forget some of the commands. If this would be useful for anyone - praise me on twitter - http://twitter.com/gamussa. Let’s start with small but important thing - how to erase everything Docker and start clean. Delete every Docker containers Don’t do this if you’re on the plane. Downloading new images using airline’s wifi will be the pain. Proceed with caution. You have been warned. ...

November 28, 2018 · 2 min · Viktor Gamov

Who is tweeting about hashtag KSQL?

TL;DR Another day, another post. This time it’s another playbook for my http://DataSciCon.tech talk «Who’s tweeting about #datascicon» on November 30th 2018 [1] A full source code published in confluetninc/demo-scene repository [2] Table 1. Revisions history Version Date Comments v1.1 12/02/2018 Small fixes in codes, screenshots, images v1.0 11/28/2018 Initial revision Prerequisites Docker Docker Compose Get example from GitHub If you will follow steps below you should checkout only directory that has source code relevant to this post. mkdir ~/temp/demo-scene cd ~/temp/demo-scene git init . git remote add origin -f https://github.com/confluentinc/demo-scene/ git config core.sparsecheckout true echo "twitter-streams/*" >> .git/info/sparse-checkout git pull --depth=2 origin master cd twitter-streams ls -lh and you should see something like this The output of ls -lh twitter-streams ...

November 28, 2018 · 3 min · Viktor Gamov

Streaming Movies Ratings with Kafka Streams and KSQL

TL;DR The sole purpose of this blog post is to draft a playbook for my presentation «Crossing the streams: Rethinking Stream processing with Kafka Streams and KSQL» [1] that I recently did on Kafka Summit 2018 in San Francisco. A full source code published in confluetninc/demo-scene repository [2] Table 1. Revisions history Version Date Comments v1.2 01/17/2019 use CP 5.1.0, updated Control Center screenshots v1.1 11/21/2018 Fixed links and minor grammar v1.0 11/20/2018 Initial revision Disclaimer: Another goal is to exercise some ideas around the visual representation of posts in this blog. And third and the last goal is to brush up my technical writing skills! Since I moved to DevX [3] from Professional Services where I did write a truckload of customer engagement reports. ...

November 20, 2018 · 4 min · Viktor Gamov

Divide, Distribute and Conquer — Stream v. Batch @ Philly JUG

TL;DR On September 13th 2017 I presented «Divide, Distribute and Conquer: Stream v. Batch» at Philly JUG. In this presentation I talked about how developers and data engineers are changing their perception on data processing using streaming data technologies. Table 1. Revisions history Version Date Comments v1.0 09/20/2017 Initial revision Tweets @ThePhillyJUG meetup where @gamussa talked about stream vs batch, #kafka #kafkastreams pic.twitter.com/6KlFwfnCAw — Jason Young (@jythejavaguy) September 14, 2017 @gamussa: "how many here use Gradle? Maven? Hmm, people have made some poor life choices. (J/K!)" Didn't say which was the right choice :) pic.twitter.com/rPAGZNKEoy — Jason Young (@jythejavaguy) September 14, 2017 A presentation Have you seen this? Please, rate! Loading... Slides [Philly JUG] Divide, Distribute and Conquer: Stream v. Batch from Viktor Gamov Useful links Kafka Streams [1] Confluent repo of Kafka Streams examples [2] Grab the code You can find code sample is following GH repository https://github.com/gAmUssA/kstreams-wordcount 1. https://kafka.apache.org/documentation/streams/ 2. https://github.com/confluentinc/kafka-streams-examples

September 20, 2017 · 1 min · Viktor Gamov

I'm Speaking At JavaOne 2017

TL;DR I’m going to speak at JavaOne 2017 in San Francisco, CA October 1st - 5th. My session can be found in the Session Catalog. I ♥ JavaOne! Seriously, if in 2017 you do Java and it pays your bills, this is a conference you don’t want to miss. And this year this is going to be BIG! JavaOne is leaving the hotels and going to the San Francisco Prime location - Moscone West! And I’m excited to deliver 3 (THREE!) presentations at JavaOne this year. Here’s what I’m going to talk about this year: ...

September 7, 2017 · 2 min · Viktor Gamov