Review of Stephane Maarek’s ‘Learn Apache Kafka for Beginners v2’
Tags: Data Engineering, Big Data, Kafka, Udemy

In this article, I am going to give a review of the ‘Learn Apache Kafka for Beginners v2’ course by Stephane Maarek on Udemy. I will break this review down into the following sections:

1. Value

2. Content

3. Strengths

4. Weaknesses

5. Recommendations for students

Before that I want to give some background about myself and why I selected this course. Briefly, I am a full stack developer seeking to transition into a big data role. The requisite skills for a data engineer are far broader than those of a web developer, and while there is some overlap, there it’s not by much. The tech stack is different, the day to day work is clearly very different, therefore the transition will take significant work. One important skill for a data engineer is some type of event streaming platform, and Apache Kafka seems to be the king.

So with that established, the next step was finding a course that was accessible and rich with learning material. I typically first look for free materials to study, there is a series on the Confluent site about Kafka, as well as the documentation, but I learn best by doing — that means project based learning. I made my way through a few hours of videos online, but the lack of structure made me feel that I was spinning my wheels a little. I struggled to find high quality, free, project based learning resources, so I turned to Udemy to find something with a better defined learning track.

I needed a course that could introduce a complete beginner to Kafka, walk them through a project, and ultimately leave the student ready to create their own portfolio project with the skills learned. A quick search yields a results page that’s dominated by courses from creator Stephane Maarek. All of his courses with 4+ star reviews, so I figured he would be the right choice. When this result comes up, it’s a no brainer:

So I grabbed the course.

Value

The value of the course is a subjective matter, because it depends on your expectations of the course, what do you want to get out of it? The course is originally priced at £74.99, which seems a little high when you consider that this is a beginner level course, but if you’re a regular Udemy user you’ll know that the listed price is not really representative as courses can usually be purchased on sale. I ended up paying £15, so purely based on price, it’s definitely something that anyone can afford. In terms of what you get for your money, take a look at the content and see for yourself. You certainly get at least your money’s worth at £15, though.

Content

The course includes 7. 5 hours of video lectures. The course breaks down into what I’d recognise as 2 core sections:

1. Fundamentals

A section that goes deep on Kafka theory. What is Kafka? Why is Kafka used? A look at the Kafka architecture from a system design perspective. Something very important in this stage is that you take notes. The theory of Kafka is extremely dense with information if you’re new to it, and if you want to be sure you’re focussed and absorbing the information, take some notes. Once you understand Kafka conceptually, you get to work with a load of exercises that involve setting up Kafka clusters, creating topics, topic configuration, broker configurations, working with producers and consumers, groups — all from the Kafka CLI. This is a key part of learning in my opinion. Theory is necessary, but not sufficient. Most people are not buying Udemy courses to watch a talk or presentation, they actually want someone to guide them through the process of doing — and that’s exactly what we achieve in this section. Theory is paired with action, and that’s extremely valuable. To get real value, you must code along. Finally, when you’re comfortable with the theory, and you’ve internalised the material after hands on exercises, you begin programming with Java. This was something of a pain point for me, I know a little Java, but I don’t program in Java. I downloaded an IDE and coded along with the exercises, but I soon realised that, I don’t want to learn Java. disclaimer: this is complete personal preference since the course is explicit about the fact that you will program in Java for the programming exercises. I decided to see if I could copy the Java exercises in a different language — python… Thankfully there is enough choice for Kafka python libraries, there’s even support from Confluent, meaning I was able to do this without much friction at all, great! Ultimately this was actually a good step because it encouraged problem solving and independent thought, rather than copying code monkey-see money-do, I had to read the code, digest it, and then recreate it in another language.

2. Real World Project

In this section of the course, we are presented with a challenge: To take the skills learned in the fundamentals section, and use them to build a solution. I found this to be a useful exercise, mainly because it forces you to think independently about your solution, and it guarantees that you actually learned something, and you weren’t just copying along like a parrot. I like the fact that the instructor challenges you, before giving you the answers. It was especially engaging for me, since I was working with python but the course material was all in Java, it meant I really had to problem solve independently and figure it out. Now, if you were unable to produce a solution to the project, the rest of the section walks through how to build it, and covers a lot of detail in terms of justifying the code — this helps the student understand why decisions are made, which adds colour to their overall understanding of Kafka.

These two sections are the most intense and will cover the majority of the Kafka theory and practical skills you need to come away feeling confident. It serves as a great point to launch from to build projects. You will feel comfortable enough to begin working on projects, and you’ll have a sufficient foundational understanding to be able to make sense of advanced configurations when reading the docs.

Additionally, there are some additional sections, but these are not quite as involved. We have a section discussing the Kafka ecosystem, that’s things like Kafka streams and Kafka connect. We only get a high level overview of these tools, and the idea of this section is more to give some context about how Kafka is used in the real world. There is no discussion of code, or any work with these tools, just a description of what they are, and when they’re used.

To add clarity to these descriptions, we see some high level examples based on real world use cases for big tech companies, to see how each tool might fit into an organisation.

Ultimately I found these extra sections to be helpful as a beginner, but I wouldn’t consider them to be highly valuable like the Theory and Exercise sections.

Finally, toward the end of the course, we see a short section on some advanced configurations of Kafka. This section exists to make you aware of some common gotchas that can arise when dealing with advanced configs, it’s more of a bonus section/ notes section in my opinion.

Strengths

This course was a great introduction to Kafka, it assumes you know nothing, and builds your understanding from the ground up, so concepts are understandable without any prior training.

The instructor is great, he is very clear about his presentation, and he makes all of the presented concepts easy to understand. You can tell the instructor has carefully thought out his presentation.

There is a good balance between hand holding and independence in the course. We are instructed in such a way that we feel we get good value for our money — the instructor is not lazy about explanations, and there is a lot of time dedicated to explaining things in the right level of detail.

The course isn’t all talk from the instructor though, we are regularly being presented with opportunities to practice, which is great for learning.

Ultimately, the course is a good way to bring yourself up to speed with Kafka in a very short amount of time. The core sections 1&2 are about 5 hours total, which means even if you’re coding along, you can get this done inside of a week.

Weaknesses

During the course, the instructor mentions that deploying Kafka in the real world is hard, but there’s nothing more said about it. It would help if this topic could be discussed in more detail with examples.

We only work in a local sandbox. Given that Kafka is by definition a distributed system, it would be nice if we could engage in some examples, or look at a real scenario of Kafka deployed in the cloud. How do we work with a cluster deployed across the cloud, versus a local demo? I realise adding a cloud computing section would reduce the specificity of the course, and add in a significant chunk of time, but maybe just a look at some examples would be nice.

I would have preferred to build several projects, rather than just one. This could help in understanding how we should use different architecture, and config permutations depending on the scenario.

Overall, my criticisms are centred around the theme that there’s a want for more real world information in the course. This is a beginner level course though, so perhaps this would be inappropriate. Concretely, there’s still something of a gap that can only be filled by experience — but if you’re a proactive learner, you can bridge this gap yourself, by working on your own projects.

Recommendations

Overall the course is really excellent, and if you’re looking to learn about Kafka, I would very strongly recommend that you buy it. Be smart and wait for a sale though!

To get the most out of the course you must take notes and focus during the theory sections, code along during the CLI sections, find a Kafka API in your language of choice- don’t feel forced to use Java, using your language will force you to learn independently, on the final project you should take the challenge and try to figure out a solution on your own before looking at the solution.

When you’re done, build a project on your own. That’s what I’ll be doing!