Kafka的理论基础和配置

一、什么是kafka?

Kafka是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等。主要应用场景是:日志收集系统和消息系统。

举个例子,生产者生产鸡蛋,消费者消费鸡蛋,生产者生产一个鸡蛋,消费者就消费一个鸡蛋,假设消费者消费鸡蛋的时候噎住了(系统宕机了),生产者还在生产鸡蛋,那新生产的鸡蛋就丢失了。再比如生产者很强劲(大交易量的情况),生产者1秒钟生产100个鸡蛋,消费者1秒钟只能吃50个鸡蛋,那要不了一会,消费者就吃不消了(消息堵塞,最终导致系统超时),消费者拒绝再吃了,”鸡蛋“又丢失了,这个时候我们放个篮子在它们中间,生产出来的鸡蛋都放到篮子里,消费者去篮子里拿鸡蛋,这样鸡蛋就不会丢失了,都在篮子里,而这个篮子就是”kafka“。

鸡蛋其实就是“数据流”,系统之间的交互都是通过“数据流”来传输的(就是tcp、https什么的),也称为报文或“消息”。消息队列满了,其实就是篮子满了,”鸡蛋“ 放不下了,那赶紧多放几个篮子,这就是kafka的扩容。

二、使用Kafka的好处

1、异步处理:通过消息队列将需要进行处理的消息进行存储,但不立即处理它,需要的时候再去消费消息队列中的数据。比较常见的有发送短信验证码、发送邮件。

2、系统解耦:原来一个微服务是通过接口(HTTP,如Feign) 调用另一个微服务,这时候耦合很严重,只要接口发生变化就会导致系统不可用。使用消息队列可以将系统进行解耦合,现在第一个微服务可以将消息放入到消息队列中, 另一个微服务可以从消息队列中把消息取出来进行处理。

 3、流量削峰:因为消息队列是低延迟、何靠、高吞吐的,可以应对大量并发。

  4、日志处理:可以使用消息队列作为临时存储,或者一种通信管道。

二、消息队列的模式

分布式消息传递基于可靠的消息队列,在客户端应用和消息系统之间异步传递消息。有两种主要的消息传递模式:点对点传递模式、发布-订阅模式。大部分的消息系统选用发布-订阅模式。Kafka就是一种发布-订阅模式

A、点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除)

在点对点模式中,生产者生产消息发送到消息队列中,然后消费者从队列中取出并且消费消息。一条消息只能被一个消费者消费一次(即使存在多个消费者),当该消费者消费了队列中的某条数据之后,会通知队列,然后队列将该条数据删除。该模式即使有多个消费者同时消费数据,也能保证数据处理的顺序。

B、发布/订阅模式(一对多,数据生产后,推送给所有订阅者,消费者消费数据之后不会清除消息)

在发布/订阅模式中,消息生产者将消息发布到消息队列中,同时有多个消息消费者(订阅主题topic)消费该消息,和点对点的方式不同,发布到队列的消息会被所有的订阅者消费,被消费后的消息不会立马删除(默认保留7天),因为他不是存储系统。在发布-订阅消息系统中,消息的生产者称为发布者,消费者称为订阅者。有两种消费方式,一种是是消费者去主动去消费(拉取)消息,而不是生产者推送消息给消费者;另外一种就是生产者主动推送消息给消费者。

三、Kafka架构图

1)Producer :消息生产者,就是向kafka broker发消息的客户端。

2)Consumer :消息消费者,向kafka broker取消息的客户端

3)Topic :可以理解为一个队列。

4)Consumer Group :一个ConsumerGroup里面可以有一个或者多个Consumer,一个Topic每个Partition的数据只能被一个Consumer消费。一个Consumer可以消费多个Partition的数据,反过来不行。

5)Broker :一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。

6)Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。Partition中的每条消息都会被分配一个有序的id(offset)。Kafka只保证按一个partition中的顺序将消息发给consumer,不保证一个topic的整体(多个partition间)的顺序。

7)Offset:每条消息被添加到分区时,都会被分配一个offset,它是消息在分区中的唯一编号,kafka通过offset保证消息在分区内的顺序。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值