Library / SDK
zhisheng17/flink-learning avatar
zhisheng17/flink-learning

flink-learning: the series teaches 1.9, the code is at 1.14

A Flink learning blog (http://www.54tianzhisheng.cn/) covering Flink fundamentals, concepts, principles, hands-on practice, performance tuning and source code analysis, including Connector, Metrics, Library, DataStream API, and Table API & SQL, plus large-scale production case studies (PV/UV, log storage, real-time dedup of billions of records, monitoring and alerting).

15,106 stars3,914 forksJavaApache-2.0

At a glance

What is it?
This is a Chinese-language Flink tutorial repository from one author, built as thirteen Maven modules covering sources, sinks, windowing, time semantics, deployment and SQL, plus a long-form article series and conference slide decks. It has been genuinely useful to a lot of people. It also has a version problem it cannot fix, a build instruction that skips the tests, and a section on downloading textbooks that its own authors removed for copyright reasons.
Who is it for?
This repository suits a Chinese-reading developer who wants worked examples of stream processing before reaching for the official documentation, and who can read older Flink APIs. Two cautions.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Activity is slowing. The repository last received commits 6 months ago.
What is it written in?
Mainly Java, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 14, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • zhisheng17/flink-learning15,106 ★ · +7
Star history
Repository2026-09-212026-11-14
zhisheng17/flink-learning15.1k15.1k

7 Stars in the last 54 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

The teaching material and the code target different Flink versions

The repository contains two things: a long article series, and a set of Maven modules you can compile. They are not on the same version, and neither is on a current one.

The series is described as built on Flink 1.9, which was released in 2019. The code on the default branch was last upgraded to 1.14.2, in December 2021. The branch itself was last pushed on 2026-05-06.

The change log makes the gap explicit across several entries. It records an upgrade to 1.10, then to 1.13.2 with a note that the API changed significantly, then to 1.14.2. The earlier note says the code was tested and should be used as the reference, and then warns that if it does not work on your cluster you should check that your Flink version matches or look for dependency conflicts.

That warning is the most useful sentence in the file. The author is telling you that version mismatch is the expected failure, and the practical consequence is that none of this compiles cleanly against a current Flink without work. Read it as a conceptual reference, not as a project you build and run.

The default branch is not a superset of the older ones

One entry in the change log describes a migration that is easy to miss and expensive to discover later.

It says that when the code was upgraded past a major API change, the structure was adjusted accordingly, that some code was deleted from the default branch, and that the previous code was moved to a separately named feature branch for anyone who needs it.

So the default branch is not the union of everything that ever worked. When an API changed, some examples were deleted rather than kept alongside the new ones.

That matters for anyone following the article list on the front page. Several of those articles are from 2018 and 2019 and describe APIs that have since changed. If an article points at a file that no longer exists on the default branch, it is not because the article is wrong about the concept. It is because the example was removed in the 1.13.2 migration.

There are version-pinned branches for the older releases, so the material is recoverable if you know which version you need. But nothing on the front page maps an article to the branch that still contains its code.

So treat the article list as an index of concepts, and treat the branches as the only reliable source for code you intend to compile.

The recommended build command skips every test

The build section is short. It suggests you may need a mirror configured in your Maven settings file for the central repository, and then gives one command to build the project.

That command is:

code
mvn clean package -Dmaven.test.skip=true

The property in that line skips the tests outright, rather than skipping only their execution while still compiling them.

For a tutorial repository that is a defensible choice, since the point is to get thirteen modules compiled rather than to demonstrate testing practice. But it has two consequences worth stating.

First, a green build here tells you the code compiles and nothing else. If you are using this repository as a reference for how to structure a Flink module, you are not being shown anything about testing, and you are not being protected from a broken example that happens to compile.

Second, it sets a habit worth breaking. The command most people copy out of a readme is the command they type for the rest of the project, and a test-skipping flag in your shell history is a thing to notice later.

If you are building this yourself, run the tests instead of taking the documented flag.

The documented build points the central repository at a third-party proxy

The same build section tells you that your Maven settings file may need a mirror, and then provides the XML for one.

It declares an identifier, sets the mirror to apply to the central repository, and sets the URL to a mirror operated by a Chinese cloud provider. The mirror identifier is named after that provider.

It is presented as a convenience for making the build fast and reachable, which is a real problem for anyone outside that region, and a mirror of the central repository is a very common configuration in that context.

But it is worth noticing what the configuration does. Everything every Maven build in this repository downloads comes through one third party. That provider sees every artefact name and every version your build requests. It is the default artefact in everyone's build when they follow this page.

That is a supply chain decision disguised as a performance tweak. The mirrors are widely used and generally trustworthy, and there are good reasons to use them. But they belong in a developer workstation, chosen deliberately, rather than in a project's documented default.

If you are following this build, decide for yourself which artefact proxy you want, and say so in your own settings file rather than inheriting the one on the page.

The textbook section was removed for copyright and points at an older branch

There is a dated entry listing four Flink and stream processing books with empty download links beside them, followed by a note.

The note says that because of copyright problems the books are not provided and have therefore been deleted, and that if you need them you should switch to an older branch to download.

So the authors identified a real problem, removed the files, and then documented where the files went. That is worth naming plainly as a defect, because the second half of the note undoes the first.

One of them is described as written by members of the Flink PMC.

The right resolution is to leave them removed and link to a publisher or a library instead. Routing readers to a branch that still contains them is a redistribution workaround, and it is not one you should follow if you are trying to stay clear of the question.

Ignore that section entirely and buy or borrow the titles. The repository itself is licensed under Apache-2.0.

The free repository is the entrance to a paid subscription

There is a section near the end of the front page about study materials, and it reads as a funnel.

It asks you to add the author on a messaging platform, then reply with a single keyword to receive the material unconditionally. It adds that reprints require the author's permission and violators will be dealt with. And it points to a paid membership community for further material, with a long list of article titles inside it.

None of that is hidden, and it is a common shape for Chinese technical content: a generous free repository that establishes authority, with the paid material behind it.

The code is under the Apache-2.0 licence, so nothing in the repository itself is gated. What is gated is the material in the membership community, which several entries in the front-page article list also link to.

So if you are evaluating this as a code or as a teaching reference, the licence terms are not a barrier. If you were hoping the whole curriculum is here, it is not.

The structure section of the front page is an empty heading

Read the headings near the top of the file.

One is a stargazers graph, which renders from an external service. The next is a heading asking what the project structure is. The next is a heading asking how to build.

The structure heading has nothing under it. The build heading has content. So the front page promises a map of the repository and then does not provide one.

There is a file at the repository root, tree.md, whose name suggests it holds exactly that map.

The build is not absent, though. It tells you to configure a mirror, gives you the command, and then says you will see a result if the build succeeded, without saying what that result is. So the build section tells you how to succeed and not how to verify.

The repository itself is not hard to navigate. Thirteen modules with self-describing names cover basics, change data capture, shared code, a configuration centre, connectors, core, data lake, examples, extensions, Kubernetes, monitoring, project examples and SQL, next to directories for books, papers, images and four sets of conference slide decks.

So the structure exists. It is just not on the page.

Editorial conclusion

This repository suits a Chinese-reading developer who wants worked examples of stream processing before reaching for the official documentation, and who can read older Flink APIs. Two cautions. The code targets a Flink version from late 2021, so treat it as a conceptual reference rather than something to compile against a current cluster without checking the version. And ignore the section about obtaining textbooks, which describes redistributing copyrighted books and routes readers to an older branch to download files that were removed for copyright reasons.

Frequently asked questions

What is Flink used for?

In this repository Flink is taught through worked examples rather than defined. The article lists cover data sources and sinks, stream transformations, windowing, the three notions of time, checkpoints and deployment, and the modules include connectors and SQL. The article list on the front page walks from an introduction through building on a machine, configuration files, custom sources and sinks, windowing, time semantics, and a series of read-from-Kafka write-to-elsewhere pipelines.

Is Flink a replacement for Kafka?

The front page does not answer that, and the examples suggest the two are used together rather than as substitutes. A large share of the article list is pipelines that read from Kafka and write to a different system, covering Elasticsearch, a second Kafka topic, MySQL, RabbitMQ, HBase, HDFS, Redis, Cassandra, Flume, InfluxDB and RocketMQ.

What does "flink" mean?

The front page does not explain the word, and the repository treats the name as given. What it documents is the build, the repository structure across thirteen Maven modules, a version history running from Flink 1.9 through 1.14.2, and where the written material lives: the author's blog, with the Flink 实战与性能优化 column placed in the books directory of this repository.

Official sources

  1. Issues
  2. License: Apache-2.0
  3. Project website
  4. README
  5. zhisheng17/flink-learning on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/zhisheng17-flink-learning.svg)](https://hysenlabs.com/projects/zhisheng17-flink-learning)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/zhisheng17-flink-learning.svg)](https://hysenlabs.com/projects/zhisheng17-flink-learning)

Was this useful?