全网最通俗易懂的Kafka入门

作者: JAVA3y 来自:Java3y
前言

只有光头才能变强 。
文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y
在这篇之前已经写过两篇基础文章了,强烈建议先去阅读:
  • 什么是ZooKeeper?
  • 什么是消息队列?
众所周知,消息队列的产品有好几种,这里我选择学习Kafka的原因,无他,公司在用 。
我司使用的是Kafka和自研的消息队列(Kafka和RocketMQ)改版,于是我就想学学Kafka这款消息队列啦 。本篇文章对Kafka入门,希望对大家有所帮助 。
本文知识点提前预览:
全网最通俗易懂的Kafka入门

文章插图
提前预览
这篇文章花了我很长时间画图,目的是希望以最通俗易懂的方式带大家入门,如果觉得不错,希望能给我点个赞!
一、什么是Kafka?首先我们得去官网看看是怎么介绍Kafka的:
  • https://kafka.Apache.org/intro
在收集资料学习的时候,已经发现有不少的前辈对官网的介绍进行翻译和总结了,所以我这里就不重复了,贴下地址大家自行去学习啦:
  • https://scala.cool/2018/03/learning-kafka-1/
  • https://colobu.com/2014/08/06/kafka-quickstart/
我之前写过的消息队列入门文章也提到了,要做一个消息队列可能要考虑到以下的问题:
  • 使用消息队列不可能是单机的(必然是分布式or集群)
  • 数据写到消息队列,可能会存在数据丢失问题,数据在消息队列需要持久化(磁盘?数据库?redis?分布式文件系统?)
  • 想要保证消息(数据)是有序的,怎么做?
  • 为什么在消息队列中重复消费了数据
下面我以Kafka为例对这些问题进行简单的解答,进而入门Kafka 。
1.1 Kafka入门
众所周知,Kafka是一个消息队列,把消息放到队列里边的叫生产者,从队列里边消费的叫消费者 。
全网最通俗易懂的Kafka入门

文章插图
生产者和消费者
一个消息中间件,队列不单单只有一个,我们往往会有多个队列,而我们生产者和消费者就得知道:把数据丢给哪个队列,从哪个队列消息 。我们需要给队列取名字,叫做topic(相当于数据库里边表的概念)
全网最通俗易懂的Kafka入门

文章插图
给队列取名字,专业名词叫topic
现在我们给队列取了名字以后,生产者就知道往哪个队列丢数据了,消费者也知道往哪个队列拿数据了 。我们可以有多个生产者往同一个队列(topic)丢数据,多个消费者往同一个队列(topic)拿数据
全网最通俗易懂的Kafka入门

文章插图
为了提高一个队列(topic)的吞吐量,Kafka会把topic进行分区(Partition)
全网最通俗易懂的Kafka入门

文章插图
Kafka分区
所以,生产者实际上是往一个topic名为Java3y中的分区(Partition)丢数据,消费者实际上是往一个topic名为Java3y的分区(Partition)取数据
全网最通俗易懂的Kafka入门

文章插图
生产者和消费者实际上操作的是分区
一台Kafka服务器叫做Broker,Kafka集群就是多台Kafka服务器:
全网最通俗易懂的Kafka入门

文章插图
Kafka集群
一个topic会分为多个partition,实际上partition会分布在不同的broker中,举个例子:
全网最通俗易懂的Kafka入门

文章插图
一个生产者丢数据给topic
由此得知:Kafka是天然分布式的 。
如果不了解分布式/集群,以及基本的分布式概念的同学,可以关注我的GitHub:https://github.com/ZhongFuCheng3y/3y
关键字:分布式、SpringCloud 保证能让你搞懂 。觉得我写得不错,就给我点个赞!
现在我们已经知道了往topic里边丢数据,实际上这些数据会分到不同的partition上,这些partition存在不同的broker上 。分布式肯定会带来问题:“万一其中一台broker(Kafka服务器)出现网络抖动或者挂了,怎么办?”
Kafka是这样做的:我们数据存在不同的partition上,那kafka就把这些partition做备份 。比如,现在我们有三个partition,分别存在三台broker上 。每个partition都会备份,这些备份散落在不同的broker上 。
全网最通俗易懂的Kafka入门

文章插图
红色代表主分区,紫色代表备份分区


推荐阅读