这里转载一篇B站上比较好理解的内容,非原创!转载连接小朋友也可以懂的Kafka入门教程,还不快来学_哔哩哔哩_bilibili
1、介绍
Kafka是个消息发布于订阅的系统,可以想象一下公众号,作者把文章发布到平台上,阅读者只需要去订阅相应的公众号,有新文章发布的时候就可以阅读这篇文章了,这种发布者和阅读者没有直接沟通,而是通过中间站来传递消息就是发布于订阅模式了。这个模式是一种必然.....
当只有一个程序向另一个程序发送消息时:
这只有一条链路。
当很多个应用程序向其他很多程序发送消息时:
这个链路会变得复杂,出现这个情况可能还是可以接受的....
当链路越来越多时:
这样链路太多容易造成三个问题:第一团队之间可能进行着重复的工作造成资源的浪费;第二当信息过多无法及时同步时,会造成信息的丢失;第三,各个程序之间相互依赖,耦合度太高,可能会牵一发而动全身。
这时候就需要一个中间的服务平台,Kafka就是这样一个东西。简单来说Kafka可以接收不同生产者的消息,然后让不同消费者来订阅这些消息。
2、消息、生产者、消费者
消息:可以认为是数据库里的一行数据;生产者:就是发布消息的程序;消费者:就是订阅消息的程序。Kafka就相当于一个管道,所有的生产者把消息扔到这里,所有消费者都从这里拿消息。
那就会有一个问题:消费者如何拿到自己想要的消息呢?主题(Topic)!
3、主题与分区
生产者将消息放入Kafka时需要给消息分好主题,而消费者则会订阅不同的主题;比如圆宝宝只需要圆蛋蛋的主题,它就会订阅主题定语圆蛋蛋的消息,这样所有圆蛋蛋的消息圆宝宝都可以拿到,而且不会被方框框和小心心的消息干扰。
一个主题里面可能会包含多个分区,分区可以分布在不同的服务器上,这样一个主题也就可以分布在多个服务器上,这样会比单个服务器更强大。
如下图所示,生产者会把消息放入到相应的主题的相应的分区下面,那应该怎么知道消息该放入哪个分区里呢?
这里可以分为两种情况:1、生产者指定了分区;2、如果生产者没有指定分区,分区器会根据消息里的键来决定消息的去处.....
4、分区器与键
键:就是一个标记;分区器:一个算法。
这样我们就知道一条消息包含了:主题、分区、键和值,这样它才能找到相应的去处。
那我们消费者如何读取数据呢?
5、偏移量
消费者在读取数据的时候都是说“给我partion 0的第二个”,这个第几个就是偏移量了。
偏移量在写入的时候就已经被定义好了,我们的消费者在读取数据时都是根据偏移量来读取数据的。
1、偏移量(offset):第几个;2、一个分区里,每个消息的偏移量都是唯一的;3、消费者只能顺序读取
6、Kafka
kafka使用主题来组织数据,每个主题被分为如干个分区,每个分区有多个副本。那些副本被保存在broker上,每个broker可以保存成百上千个属于不同主题和分区的副本。
一个独立的kafka也称为broker,一个broker中可能有多个主题,每个主题里面又可能有多个分区,broker接收来自生产这的消息,为每个消息设置相应的偏移量,然后保存到磁盘里,broker也为消费者提供服务,响应消费者的请求。 如果有多个broker就会组成Kafka集群。
7、Kafka集群
这是由两个broker组成的kafka集群,broker1里有主题:圆蛋蛋 分区1、主题:圆蛋蛋分区2;broker2里有主题:圆蛋蛋分区0、主题:圆蛋蛋分区1。这样的重复性保证了数据的安全,当broker1宕机了,broker2里的数据是完好的,可以从broker2内读取数据。
kafka集群中还需要一个broker来充当控制器的角色,可能要处理一些分区该分配给哪个broker,监控哪个borker挂机了这种事情。