当当当,我又来啦。
Kafka是什么吖有小伙伴问。
顺手丢两个描述。
啊官网爸爸是这样说的:
Apache Kafka™ is a distributed streaming platform.
度娘是这样说的:
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。
大蕉是这样说的:
Kafka就是汪星人,有人丢飞盘就汪汪汪。
其实Kafka就是一个消息中间件,用来在进行N对N的消息传播,跟聊天室同一个道理,那么Kafka提供了什么样的功能呢?
啊、能发布和订阅啦。
啊、消息能容错啦。
啊、有消息能及时处理啦。
啊是啦是啦、你最叻你最叻啦。
业界还有RabbitMQ,RocketMQ等,也都是很优秀的消息中间件。
使用的过程大概是这样的。大概生产者丢丢丢丢丢,消费者拿拿拿拿拿
突然收到启发,今天呢不打算讲原理,讲讲应用。
比如系统A有每次都有一个请求需要发送到系统B,而A又不需要等B的结果。这时候我们经常会起一个子线程或者丢入ThreadPool来完成这个工作。
有了Kafka,啊,A系统主线程直接丢给Kafka,完事。
B系统接收到消息就做后续操作。
这时候已经跟A没关系啦。
解耦,嗯,对。
完事。
比如我们系统A有很多的配置项,传统的思路都是放在redis啊或者jvm内存啊,这样的,然后用定时任务去检查配置项有没有更新。或者直接改配置项重启完事。
太麻烦,太浪费了,一直在空跑。
可以这样:配置项放在Map里面,跑的时候直接去Map取。
有了Kafka,啊有配置项更新,直接丢个消息给Kafka。
这时候A系统接收到消息,就屁颠屁颠跑去更新缓存里的配置项啦。
高效,嗯,对。
完事。
跟应用场景二一样,也是线上有个模型,然后跑得好好的,现在需要更新,咋办?
可以这样:模型放在Map里面,跑的时候直接去Map取。
有了Kafka,啊有模型更新,直接丢个消息给Kafka。
系统就屁颠屁颠跑去重新加载模型了。
完事。
这个就很少人能想到啦,如果我们在MongoDB有数据,需要实时跟Oracle保持一致,咋办咋办咋办?
可以这样,用Oracle的gg产生的日志文件,发送给kafka。
然后起个消费者,接收到日志文件就去操作MongoDB就可以啦。
完事。
这个没啥好说的,SparkStreaming自己去官网看。
完事。
昨天想了一下,握草,原来Kafka能干这么多事呢。