ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

kafka笔记总结

2022-07-24 15:35:22  阅读:203  来源: 互联网

标签:总结 消费者 可以 partition 笔记 Kafka topic 消息 kafka


 

一:Kafka特性

1.为什么要用消息队列      《解耦、异步、削峰》

  1.1高吞吐量、低延迟: kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个主题可以分多个分区,消费组对分区进行消费操作。

  1.2可扩展性: kafka集群支持热扩展

  1.3持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失

  1.4容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败) 

  1.5高并发:支持数千个客户端同时读写

2.技术优势  《可伸缩性: Kafka 的两个重要特性造就了它的可伸缩性》

  2.1、Kafka集群在运行期间可以轻松地扩展或收缩(可以添加或删除代理),而不会宕机

  2.2、可以扩展一个Kafka主题来包含更多的分区。由于-一个分区无法扩展到多个代理,所以它的容量受到代理磁盘空间的限制。能够增加分区和代理的数量意味着单个主题可以存储的数据量是没有限制的

  2.3、容错性和可靠性: Kafka 的设计方式使某个代理的故障能够被集群中的其他代理检测到。由于每个主题都可以在多个代理上复制,所以集群可以在不中断服务的情况下从此类故障中恢复并继续运行

  2.4、吞吐量:代理能够以超快的速度有效地存储和检索数据

二:应运场景

  1.日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放 给各种consumer,例如Hadoop、Hbase、Solr等

   2.消息系统:解耦和生产者和消费者、缓存消息等

  3.用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点 击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时 的监控分析,或者装载到Hadoop、数据仓库中做离线分析和挖掘

  4.运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告

  5.流式处理:比如spark streaming和storm

三:原理

  1.生产者   其中主要的四个概念       主题       分区        键       值

 

 

 

宏观结构

下图是 Kafka 消息系统的 分布式宏观架构图,这里分别讲下各个组件的作用及其关系:

  1. Producer: 数据的生产客户端,生产数据发送到 Kafka Cluster
  2. Zookeeper: 负责整体集群的协调工作,保存 Broker 与 Consumer 交互的元信息,并进行数据变更监控;
  3. BrokerBroker 实际上就是单台服务器,其主要接收 Producer 和 Consumer 请求,持久化Message,其中会通过选举产生一个 Controller,来主持协调工作;
  4. Kafka Cluster: 由多个 Borker 和一套 Zookeeper 组成,Broker 之间无主从关系,地位平等,可任意增删节点,这主要由 Zookeeper 维护;
  5. Consumer: 数据的消费客户端,用于从 Broker 中订阅/拉取消息;
  6.  

    微观设计

    Kafka 内部消息传递流程 如下图所示

  7.  

    Topic

    一个 消息主题,也就是一个分布式业务消息队列。不同的生产者将不同的业务消息分发到不同的 topic 上,这样,消费者就可以根据 topic 进行对应的业务消息消费了。

    Partition

    这个就是 topic 分布式的体现,由于一个 topic 就是一个业务消息,这些消息可能会源源不断来,并且有可能会同时并发很大地进入队列,将这些消息合理地分布在分布式机器中则可以保证机器的负载均衡性,同时也可以使得不同的消费者可以同时拉取不同 partition 中的消息,可提升消费者并发性能,这里总结下 partition 特性:

    • 一个 topic 分成多个 partion
    • 多个 producer 生产消息可以并行入队,多个 Consumer 可并行消费;
    • 同一个 partition 里保证消息有序, 不同 partition 则不能完全保证有序;

Consumer Group

消费者组应该是 Kafka 最大的特色了,消费者组就是消费者组成的一个组,消费者在向 Kafka 拉取数据的时候需要提供一个组名,这个名称就是消费者组名,上面的两种消息模式都可以在消费者组中得到实现:

  1. 点对点/队列模式:一个消息只能被一个消费者消费,我们只需要将这些消费者放在同一个消费者组里就可以了,这样消费者在同一个组中,那么 topic 中的一条消息只会向一个消费者组发送一次;
  2. 发布-订阅模式:一个消息可被多个消费者消费,这种情况,我们只需要将各个消费者放在各自单独的组中,各个组均订阅了此消息 topic 就可以了。

这里还有如下注意点:

  • 一个消费组消费一个 topic 的全量数据;
  • 组内消费者消费一个或多个 partition 数据,如果一个组里的消费者数量少于订阅的 topic 的 partition 数量,那么组中必有一个消费者要消费多个 partion 数据;
  • 一个组里的消费者应小于等于 topic 的 partition 数量,这是因为一个 partition 最多只能与一个 consumer 连接,那么如果 partition 数量大于 consumer 数量,则必定有 consumer 是空闲的,因此尽量避免这种情况

 

 

标签:总结,消费者,可以,partition,笔记,Kafka,topic,消息,kafka
来源: https://www.cnblogs.com/mpf123/p/16514142.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有