1.消息中间件\消息系统
将数据从一个系统传递给另一个系统
如果只是单纯的传递数据的方法,有很多,http,rpc,webservice,定时任务
如果接收方,一下子接收不过来那么多数据怎么办?
2.消息系统的分类:点对点,发布-订阅
点对点:主要采用队列的方式,如A->B, 当B消费掉队列中的数据,队列中的数据就会被删除,如果B一直不消费,队列中就会有很多脏数据。
发布-订阅:必须要有主题的概念,主题:一个消息分类
发布者:一般情况下是将消息以推的方式,发送给消息系统。
订阅者:可以采用拉和推的方式从消息系统中拿数据
3.kafka的说明:开发语言是scala,kakafka_2.11-2.2.0 其中,2.11是scala的版本,2.2.0是kafka的版本
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创建消费者
来源:oschina
链接:https://my.oschina.net/u/3156785/blog/3037309