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 消息系统的 分布式宏观架构图,这里分别讲下各个组件的作用及其关系:
- Producer: 数据的生产客户端,生产数据发送到 Kafka Cluster;
- Zookeeper: 负责整体集群的协调工作,保存 Broker 与 Consumer 交互的元信息,并进行数据变更监控;
- Broker: Broker 实际上就是单台服务器,其主要接收 Producer 和 Consumer 请求,持久化Message,其中会通过选举产生一个 Controller,来主持协调工作;
- Kafka Cluster: 由多个 Borker 和一套 Zookeeper 组成,Broker 之间无主从关系,地位平等,可任意增删节点,这主要由 Zookeeper 维护;
- Consumer: 数据的消费客户端,用于从 Broker 中订阅/拉取消息;
-
微观设计
Kafka 内部消息传递流程 如下图所示
-
Topic
一个 消息主题,也就是一个分布式业务消息队列。不同的生产者将不同的业务消息分发到不同的 topic 上,这样,消费者就可以根据 topic 进行对应的业务消息消费了。
Partition
这个就是 topic 分布式的体现,由于一个 topic 就是一个业务消息,这些消息可能会源源不断来,并且有可能会同时并发很大地进入队列,将这些消息合理地分布在分布式机器中则可以保证机器的负载均衡性,同时也可以使得不同的消费者可以同时拉取不同 partition 中的消息,可提升消费者并发性能,这里总结下 partition 特性:
- 一个 topic 分成多个 partion;
- 多个 producer 生产消息可以并行入队,多个 Consumer 可并行消费;
- 同一个 partition 里保证消息有序, 不同 partition 则不能完全保证有序;
Consumer Group
消费者组应该是 Kafka 最大的特色了,消费者组就是消费者组成的一个组,消费者在向 Kafka 拉取数据的时候需要提供一个组名,这个名称就是消费者组名,上面的两种消息模式都可以在消费者组中得到实现:
- 点对点/队列模式:一个消息只能被一个消费者消费,我们只需要将这些消费者放在同一个消费者组里就可以了,这样消费者在同一个组中,那么 topic 中的一条消息只会向一个消费者组发送一次;
- 发布-订阅模式:一个消息可被多个消费者消费,这种情况,我们只需要将各个消费者放在各自单独的组中,各个组均订阅了此消息 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