Kafka笔记

本文详细介绍了Kafka作为一个分布式消息队列的用途,解释了为何使用消息队列以提升系统效率。重点阐述了消息队列的解耦、可恢复性、缓冲和峰值处理四大优点。此外,还探讨了Kafka的基础架构,包括Kafka集群、生产者、消费者、Zookeeper的角色。文中还详细解析了Kafka的消息队列模式、分区策略以及数据可靠性保证机制,并讨论了消费者分区策略、offset维护和Kafka的高效读写数据方法。最后,提到了Zookeeper在Kafka中的作用,以及Kafka的事务和Flume与Kafka的对接方式。
摘要由CSDN通过智能技术生成

Kafka概述:
Kafka是一个基于发布、订阅的分布式消息队列,用于大数据实时处理。

为什么要用kafka?
注册信息的过程,先在网站上填写注册信息,后台会调用其他服务的接口,反馈给网页注册成功信息,最后再显示给用户,
并且将短信发送给用户,该过程为同步通信过程,需要同步等待,由于同步通信的过程比较慢效率比较低,引入了消息队列,
网页将注册信息放到消息队列中等待,然后直接回复用户注册成功,在一段时间以后用户才收到短信提示,通过消息队列将网页
和短信进行了隔离,不用让用户在注册的同时一直等待。 
同步通信干一件事等着回复,异布通信干一件事不等着回复,有回复通知即可。

消息队列的好处:
1.解耦:MQ在数据生产方和数据消费方做了一个解耦,允许你独立的扩展或修改两边的处理过程
2.可恢复:消息队列降低了进程间的耦合度,即使一个处理消息的进程故障,加入队列中的消息仍然可以在系统恢复后被处理。
3.缓冲:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致
4.峰值处理:使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。
说明:
  数据注册时写入数据库的时候考虑的高并发的请求,但发送短信的服务并没有考虑高并发,如果数据直接发到短信服务端会导致短信服务端崩溃,
  将数据发送到MQ的后,让短信服务端自己根据自己的能力去取即可。

消息队列的两种模式:
1.点对点:消费者主动拉取数据,数据被消费者消费之后消息队列中的数据会清除。
  消息生产者生产消息后发送到队列中, 然后消息消费者从消息队列中主动拉取并消费消息,消息被消费以后,队列中不在有存储,
  所以消息消费者不可能消费已经被消费过的消息,消息队列支持多个消费者,但是对一个消息而言,只可以被一个消费者消费。

2.订阅/发布:消费者消费数据之后不会清除消息
  消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,
  发布到topic的消息会被所有订阅者消费。 'topic'就是逻辑上消息队列。

Kafka基础架构:
  1).Kafka架构中涉及到 Kafka集群(多个Broker)、 生产者(生产消息) 、 消费者(消费消息) 、 zookeeper(注册消息)

  2). Kafka集群
      Kafka集群由多个broker组成,每个broker都有唯一的id.
      Kafka内部维护Topics,每个topic可以有多个分区partition,每个partition是一个有序的队列;
      为了提高可靠性,每个分区可以有多个副本replication,每个副本有各自的角色 'leader/follower',所有的读写都是由leader负责.
    
   说明:
      1.每个topic在逻辑上为一个队列,但在物理上被划分为了多个分区,每个消息队列的分区会分布在多个集群上,但集群的各个节点吞吐能力可能不同,
        此时可以根据不同节点消费的不同分区数据去处理各自区内的吞吐,从而提高吞吐量。
      2.每个topic的多个分区可以存在到一个broker;
      3.每个Topic的一个分区的多个副本必须在不同的broker;
        

  3).生产者       
      生产者的主要作用就是面向Topic生产数据.  

  4).消费者
      消费者主要是以消费者组的名义面向topic进行消息的消费。
    说明:  
      每个消费者组中的一个消费者可以同时消费一个topic中的多个分区的数据;
      但每个topic的一个分区只能被一个消费者组中的一个消费者消费;
      消费者在消费数据的过程中需要实时记录offset(消费的位置), 记录的方式为: 'group + topic + partition'
      而offiset在kafka中有一个topic用于专门维护offset,该topic比较特殊,有50个分区和1个副本。
      消费者组本质上是一个消费者,当一个消费者组中的一个消费者对应一个分区,单个消费者组正好消费完一个topic时效率最高。

  5). Zookeeper
      Kafka中topic之间的协调依赖于zookeeper运行,Zookeeper主要的作用就是让kafka去注册消息。
      例如:每个broker启动后会在zookeeper中注册,并 "选举controller" ,实际上就是抢,谁抢到谁是爹,先起的服务器有优势。
           在低版本0.9之前,消费者维护的offset存储在zk中. 
           在0.9版本之后,消费者维护的offset存储在kafka本地. 注:这与SparkStreaming消费kafka数据的API版本对应。
          
   Kafka端口号9092
   配置文件中的 'log.dirs' 不是存kafka的日志,而是存储放在kafka里面的消息,如话题,位置信息。
   消息存储在磁盘中,数据保存7天。


消费者消费数据的两种模式:
1.消息队列推送的方式:该模式很难适应消费速率不同的消费者,因为消息发送速率是由broker决定的。推送的方式只能按照消费者消费速率最小的为准,由于消息队列不清楚每个消费者的消费水平,不方便推送。
2.消费者主动拉取的方式:通过消费者自己主动来拉取,但消费者并不知道消息队列是否有消息,所以以长轮询的方式不停的拉取,但是
  若消息队列中始终没有消息,则会不停的去拉取,效率会很低,所以维护了一个时长参数timeout,如果当前没有数据可供消费,Consumer 会等待一段时间之后再返回,
  这段时长即为timeout。


环境变量的配置: 
   Linux中可以配置环境变量的位置:  
           /etc/profile  
           /etc/profile.d/xxx.sh  
           /home/atguigu/.bashrc 
           /etc/bashrc 
           ......
   登录式shell: 通过用户名和密码登录到shell中. 例如使用xshell工具连接某台服务器
           /etc/profile  ->  /etc/profile.d/xxx.sh 
   非登录式shell : ssh hadoop102 
           /home/atguigu/.bashrc -> /etc/bashrc -> /etc/profile.d/xxx.sh 

Kafka工作流程及文件存储
Kafka中消息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值