一些大的网站若是想统计用户的访问状况,若是每一个用户的访问,都在后端通过一系列的用户行为分析,而后再给客户返回结果这显然不现实,直接写入数据库,数据库也扛不住,mysql
这时候就须要一个消息系统,在用户一个请求过来后,服务器只须要把此次操做扔到后端,不用管后端的处理结果,直接返回给用户结果,这样用户体验才比较好,比较符合实际状况sql
Kafka是一个分布式的消息系统,做为用户来讲,只须要把数据扔给kafka,在须要的时候直接读就能够了,很是方便,实现异步非io阻塞数据库
kafka分为productor,consumer和broker后端
productor:消息生产者,就是向kafka里面扔数据的一方(能够是多个productor向同一个写入)服务器
consumer:消息消费者 ,就是从kafka里面消费(取)数据的一方(也能够是多个consumer向同一个kafka取数据)负载均衡
broker:一个服务器实例,这个就是productor写入的服务器(实例),consumer从这里取数据,异步
topic:一条消息流分布式
partition:分区,每一个topic能够按特定的分区逻辑分区,相似mysql的分表,ide
partition的数据决定了一个topic能够同时多少个进程(用户)去写入,消费它(若是一个topic的partition为3,那么productor只能同时起3个进程写入,consumer同时有3个进程进行消费,若是启动的数量超过3个则会一直等待)网站
consumer group:消费者组,相同groupid的consumer组成一个组
若是多个consumer都指定同一个groupid,则这些consumer会自动组成一个负载均衡的模式,消费一个topic
offset:一条消息在消息流中的偏移
举例来讲:数据1,2能够往topicid为top1里面写入 ,数据3,4能够往topicid为top2里面写入,
在消费时,指定同一个groupid,消费topicid为top1的topic,连续消费2次能够消费1,2,若是换一个groupid,则又从头开始消费,也就是同一条消费,能够被多个groupid重复消费