1.消息中间件\消息系统web
将数据从一个系统传递给另外一个系统架构
若是只是单纯的传递数据的方法,有不少,http,rpc,webservice,定时任务负载均衡
若是接收方,一会儿接收不过来那么多数据怎么办?scala
2.消息系统的分类:点对点,发布-订阅server
点对点:主要采用队列的方式,如A->B, 当B消费掉队列中的数据,队列中的数据就会被删除,若是B一直不消费,队列中就会有不少脏数据。中间件
发布-订阅:必需要有主题的概念,主题:一个消息分类blog
发布者:通常状况下是将消息以推的方式,发送给消息系统。队列
订阅者:能够采用拉和推的方式从消息系统中拿数据开发
3.kafka的说明:开发语言是scala,kakafka_2.11-2.2.0 其中,2.11是scala的版本,2.2.0是kafka的版本rpc
4.kafka的架构:
broker服务:通常状况下一台主机就一个broker服务,也能够一台主机中有多个broker服务,只要端口不同,存储路径不同能够,可是不推荐。
zookeepr服务:管理broker集群,管理元数据。
producer:生产者,发布消息的,这个消息,须要指定主题。
consumer:消费者,当多个消费者订阅同一个主题,那这个主题的同一条消息,会被重复消费。
consumer group:消费组,在同一个消费组中的消费者,对同一条消息,只能消费一次。
offset:某一个消费组,当前对一个主题的某个分区下的消费偏移量。
5.kafka的架构:
上游能够有多个生产者,生产者在生产消息时,消息须要指定主题Topic(主题以后,还能够指定分区和key),生产者生产什么主题的消息,由生产者本身决定,而不是kafka指定的,因此只要kafka存在这个主题,任何生产者均可以生产这个主题的消息。
若是消息是由kafka通知某个producer来生产的,那么kafka就须要管理全部生产者的消息,但实际上kafka是无论理生产者的。而生产者在注册的时候,实际上会通知zookeeper,且broker服务在注册时,也会通知zookeeper。
在建立一个主题的时候,须要指定副本数和分区数,主题至少须要一个分区才能建立成功。
分区数:若是主题至少须要设置1个分区,那么100条数据都会放在这个主题下的一个分区里。但若是指定了分区数是3,那么90条数据,就会放在3个分区中,且每一个分区中有30条数据。
消费组在拉取消息时,能够拉取某个主题下的消息,也能够拉取某个主题下的某个或某几个分区下的消息。生产者在生产消息时,也能够指定生产某个主题及某个主题下的某个分区的消息。
架构说明:
一个典型的kafka集群包含若干producer,若干broker,若干Consumer,以及一个Zookeeper集群,kafka经过Zookeeper管理集群配置,选举Leader,以及在Consumer Group发生变化时进行Rebalance(负载均衡)。Producer使用push(推)的方式将消息发布到Broker,Consumer使用pull(拉)的方式从Broker订阅并消费消息。
5.1先启动zk
5.2启动kafka server
5.3建立主题
5.4建立生产者
5.5建立消费者