之前我想要把数据结构写完,再来写这些乱七八糟的东西。不过最近一段时间工作比较忙,加上未来涉及到中间件的使用,回头还是先把中间件的理解先放在前面吧,数据结构这块不会烂尾的。
kafka 是什么
官网上指出”A Distributed Streaming Platform”,一个分布式的流处理平台
- PUBLISH & SUBSCRIBE 发布和订阅
- PROCESS 处理
- STORE 贮存
流处理具体是什么含义相信大家都理解,毕竟一个java工程师对Linux和C一定是很熟悉的。
那么kafka三大功能都是什么含义呢?
PUBLISH & SUBSCRIBE
e.g.
我们开车通常会听广播,那广播是从广播电台统一发布
那我们接受广播,只需要打开收音机,订阅广播即可听到这个声音
那么这个关系,就是发布和订阅的关系,一端发出,一端订阅
对应到kafka中的概念,就是
- Producer 生产发布
- Consumer 消费订阅
PROCESS
编写可扩展的流处理应用程序,用于实时事件响应的场景。一开始我们看到kafka定位为“一个分布式的流处理平台”
既然是流处理,那处理必然是一个很关键的一点
e.g. 一个秒杀活动,并发量特别大,并发量大的时候,可能会有大量用户同时提交付款,但我们的服务器可能无法承载这么多并发,那我们采用延时订阅等方式,以达到可以处理历史数据的应用程序
STORE
安全的将流式的数据存储在一个分布式,有副本备份,容错的集群。
这个概念比较简单了,意思是这个数据是有备份的,你有几个集群,这个数据就会被备份几份,比如说你有总容量600G的3台主机建立了3个kafka集群,那么实际有效存储只有200G,这是因为每个数据都会被同时备份到另外两台主机中,以保证数据不会丢失,利用空间换取稳定。同时这个集群是一个容错的集群,后期我会做这个容错测试,让自己也能更放心大胆的用kafka。
在这里延伸两个名词
- Topic Kafka将消息种子(Feed)分门别类,每一类的消息称之为一个主题(Topic).
- Broker 已发布的消息保存在一组服务器中,称之为Kafka集群。集群中的每一个服务器都是一个代理(Broker). 消费者可以订阅一个或多个主题(topic),并从Broker拉数据,从而消费这些已发布的消息。
那么以上就是kafka的官网概念回顾。总体来讲只要接触过集群,分布式,微服务的概念,理解这些应该是非常非常简单的
总之kafka有四个小概念,Producer
,Consumer
,Topic
,Broker
那么根据这四个概念,我们简单建立一个消息系统模型
工厂A 每分钟生产馒头5个 —为工厂A建立 Topic FactoryA
工厂B 每分钟生产窝头1个 —为工厂B建立 Topic FactoryB
那么两个工厂每分钟都会发布一个消息到各自的主题(Topic)中
为了保证工厂发布渠道的稳定性,那两个工厂合资创建了3个销售渠道Broker0,Broker1,Broker2
因为工厂每分钟总共就生产出固定的馒头,不会因为某个销售渠道卖的多而增加产量,所有这三个渠道之间的库存数据(待消费数据)是同步的
此时客户来了,客户可能只想吃馒头,那他只订阅FactoryA,那么FactoryB的数据就不会给这个客户,而客户也并不关心是哪个销售渠道提供的,他只关心最后送来的东西是工厂A生产的馒头,就OK了。
如果客户比较能吃(服务器承载量大),那他可以订阅两个Topic,一起处理
这种就是我们的消息系统的实际应用场景
ps: 官网上提供了很完整的下载,启动,测试的方法,这个笔记中不做记录,想练回头看下官网的Quick Start即可,同时安利一个中文版的国内网站,翻译的有些偏差,不过也非常棒,减少了我的一些阅读障碍
kafka重要配置项
############################# Server Basics ########################### |