Java Handbook · Courses
Learn Java the way it runs — from main() to Kafka and Flink.
In-depth courses by Gopi Gorantala, a Staff Engineer who builds real-time Kafka and Flink platforms for core banking. Every lesson pairs the idea with code you run yourself — deep enough for production and for interviews. In-depth courses by Staff Engineer Gopi Gorantala. Every lesson pairs the idea with code you run yourself.
cluster: javahandbook.com · 1 producer · 5 topics · 5 consumer groups
cluster: javahandbook.com · 5 topics
Pick a topic. Subscribe to the one you need.
Pick a topic. Subscribe to it.
producer.send() → course log → consumer.poll()
KafkaProducer
<Course, Lesson>
Gopi Gorantala
Staff Engineer. Kafka at ING Bank, Flink and core-banking platforms in production.
acks=all · idempotence=true
ConsumerRecords<String, Lesson> records = consumer.poll(Duration.ofMillis(100)); // group.id=system-design
live · auto.offset.reset=earliest live · consumer.poll()
Lessons for this topic are on the way.
partition=p0-control-statements offset=[n] key=control-statements If Statement read → partition=p1-control-statements offset=[n] key=control-statements What are Control Statements? read → partition=p2-java-core offset=[n] key=java-core Convert String To int read → partition=p3-strings offset=[n] key=strings Introduction To Strings read → partition=p0-dsa offset=[n] key=dsa Subsets/Powerset read → partition=p1-dsa offset=[n] key=dsa Big O Complexities read → partition=p2-dsa offset=[n] key=dsa Best Practices read → partition=p3-dsa offset=[n] key=dsa Subsets Or Powerset read → partition=p0-modern-java offset=[n] key=modern-java How To Write Lambda Expressions read → partition=p1-modern-java offset=[n] key=modern-java What Are Lambda Expressions? read → partition=p2-modern-java offset=[n] key=modern-java Power Of Two (Exercise Problem) read → partition=p3-modern-java offset=[n] key=modern-java User-Defined Customer Interface (Exercise Problem) read →// stream processing · new course
Then process the stream — with Apache Flink.
The Flink course picks up where Kafka leaves off: the same passport events, now keyed, windowed, timed and checkpointed — so you learn event time and state on a system you already understand. The same passport events, now keyed, windowed and checkpointed.
job: passport-sla-monitor · RUNNING · parallelism 4 checkpoint 42 completed · backpressure OK
event time → window [10:03:00, 10:04:00)
on-time event late event → side output watermark checkpoint barrier
checkpoint 42 completed · W(10:03:58)
// directory
Everything on this site, in one table.
| Section | What's inside | Come here when… | Find it at |
|---|---|---|---|
| Core Java | Syntax, OOP, collections, the JVM | You're writing your first program | /learn-java/ |
| Strings & interview Qs | String pool, immutability, primitives vs wrappers | An interview is on the calendar | /java-strings/ |
| Data structures | Arrays zero-to-hero, bit manipulation, challenges | You're grinding coding problems | /java-arrays-mastery/ |
| Modern Java | Lambdas, functional interfaces, the Streams API | A review comment says "use streams" | /java-streams-api/ |
| Build & design | Maven, multi-module builds, design patterns | The project outgrew one module | /maven-course/ |
| Apache Kafka | Partitions, delivery guarantees, rebalancing, Streams | Kafka keeps showing up in design meetings | /apache-kafka-course/ |
| Apache Flink | Event time, keyed state, checkpoints | Batch jobs aren't fast enough | /flink/ (soon) |
| Blog & newsletter | Debugging notes, one deep lesson a week | You want to follow along | /blog/ · /rss/ |
Latest lessons in the handbook
$ tail -f javahandbook.com/lessons $ tail -f lessons
Hi, I'm Gopi.
I build real-time platforms for financial infrastructure — streaming on Apache Kafka and Apache Flink, with strict ordering, exactly-once processing, watermarking, and schema evolution. I've built reconciliation pipelines for core banking, where a lost event isn't a bug — it's a financial discrepancy. I build real-time Kafka and Flink platforms for core banking. A lost event isn't a bug — it's a financial discrepancy.
// newsletter · weekly
One deep lesson a week. Nothing else. One deep lesson a week.
Kafka and Flink internals, Java that isn't obvious, and the failure modes nobody writes down. 2,400 engineers read it.