分布式消息队列Kafka理论(浅显易懂)

简介: 分布式消息队列Kafka理论(浅显易懂)

0x00 教程内容


  1. Kafka概述
  2. Kafka的架构
  3. Kafka的容错性测试


0x01 Kafka概述


1. Kafka概述

Apache Kafka® is a distributed streaming platform. What exactly does that mean?


A streaming platform has three key capabilities:

Publish and subscribe to streams of records, similar to a message queue or enterprise messaging system.

Store streams of records in a fault-tolerant durable way.

Process streams of records as they occur.


来源于官网:http://kafka.apache.org/10/documentation.html#introduction


2. Kafka的作用

a. Kafka类似于消息队列或者企业消息系统

竟然是消息队列,消息系统,那么就会有生产者与消费者。


b. 如何理解生产者、消费者?

小故事:

包子师傅:生产者

你:消费者

包子:数据流,消息


c. 场景分析:

理想情况下,包子师傅生产一个包子,你就吃一个包子。

但现实情况下,生产一个,吃一个,肯定是来不及,往往没有这么完美的。

场景一:吃到某一个的时候,可能就吃不下去了,就相当于我们的消息系统里面的卡顿了,可以理解为我们的机器故障了。此时,师傅还在继续生产包子,那么多余的包子就丢失了。

场景二:生产包子的速度太多,你来不及吃,那么馒头也就丢失了。


问题:如何做到包子不丢失?

解决:拿个篮子来装着,等我们需要吃的时候,再向篮子里面拿即可。


问题:如果篮子满了,那么多余的包子就丢失了

解决:多准备几个篮子来装着


类比概念:我们的Kafka相当于篮子,起到一个缓冲的作用。


d. 三大特点:

1、发布订阅消息系统

2、以容错、持久的方式存储记录流

3、可以以流的方式消费信息


0x02 Kafka的架构


1. Kafka相关概念

a. producer:生产者,包子师傅

b. consumer:消费者,吃包子的你

c. broker:Kafka,篮子

d. topic:主题,即给包子打的标签,用来区分谁吃哪个包子。不是每个包子都可以吃的,我们可以选择性地吃某个人生产的包子。


2. 图解Kafka概念之Topic


image.png

image.png


a. Kafka可以作为一个集群运行在一个或多个可跨多个数据中心的服务器上,也就是说,Kafka可以以单机或者集群的方式出现。我们在创建Topic的时候,可以设置分区,比如三台机器设置三个分区,那么每个分区就分别落在三台机器上,分别是Partition 0、1、2,消费者也可以选择特定的分区去消费。

b. 由上图可知,每个分区都是一个有序的记录序列,而且它是不可变的。


image.png


c. 队列中,有一个叫偏移量(offset)的概念,是用来记录我们的消费位置的。消费者可以控制它的位置,所以可以按照自己喜欢的任何顺序消费信息。例如,消费者可以重置为较旧的偏移量以重新处理过去的数据,或者跳到最近的记录并从“现在”开始消费。

d. 这些功能组合意味着Kafka消费者不需要消耗什么性能,对集群或者其他消费者没有多大的影响。

e. 日志中的分区有多种用途。首先,当日志大小超过了单台服务器的限制,Kafka允许日志进行扩展。每个单独的分区都必须受限于主机的文件限制,不过一个主题可能有多个分区,因此可以处理无限量的数据。其次,它们充当了并行性的单位,关于此点,请参考官网。


0x03 Kafka的容错性测试


1. 实践步骤

a. 分别启动三个Kafka,前提是要先部署好Zookeeper集群

b. 创建一个topic,分区为3,副本系数也是3

c. 查看此topic的详细信息,并杀掉其中的主节点,和一台从节点

d. 再查看此topic的详细信息


2. 效果展示

a. 不影响使用,仍然可以发布订阅消息。


0xFF 总结


  1. Kafka的安装与部署Windows版本,请参考教程:Kafka的安装及发布订阅消息系统(windows)
  2. Kafka的安装与部署Linux版本,请参考教程:复制粘贴玩大数据之安装与配置Kafka集群


相关文章
|
4月前
|
消息中间件 存储 监控
消息队列系统中的确认机制在分布式系统中如何实现
消息队列系统中的确认机制在分布式系统中如何实现
|
4月前
|
消息中间件 存储 监控
【10月更文挑战第2天】消息队列系统中的确认机制在分布式系统中如何实现
【10月更文挑战第2天】消息队列系统中的确认机制在分布式系统中如何实现
|
4月前
|
消息中间件 大数据 Kafka
大数据-77 Kafka 高级特性-稳定性-延时队列、重试队列 概念学习 JavaAPI实现(二)
大数据-77 Kafka 高级特性-稳定性-延时队列、重试队列 概念学习 JavaAPI实现(二)
52 2
|
4月前
|
消息中间件 NoSQL 大数据
大数据-77 Kafka 高级特性-稳定性-延时队列、重试队列 概念学习 JavaAPI实现(一)
大数据-77 Kafka 高级特性-稳定性-延时队列、重试队列 概念学习 JavaAPI实现(一)
79 1
|
4月前
|
消息中间件 存储 监控
消息队列系统中的确认机制在分布式系统中如何实现?
消息队列系统中的确认机制在分布式系统中如何实现?
|
6月前
|
消息中间件 存储 监控
消息队列系统中的确认机制在分布式系统中如何实现?
消息队列系统中的确认机制在分布式系统中如何实现?
|
6月前
|
消息中间件 存储 Java
分布式消息队列基础知识
本文概述了分布式消息队列的基本概念、组成、模式、基础与高级功能,以及它在业务开发中的应用和核心技术,为深入学习RocketMQ等消息队列组件提供基础知识。
分布式消息队列基础知识
|
7月前
|
消息中间件 Java Kafka
kafka Linux环境搭建安装及命令创建队列生产消费消息
kafka Linux环境搭建安装及命令创建队列生产消费消息
141 4
|
6月前
|
消息中间件 存储 Kafka
现代消息队列与云存储问题之Kafka在海量队列场景下存在性能的问题如何解决
现代消息队列与云存储问题之Kafka在海量队列场景下存在性能的问题如何解决
|
6月前
|
消息中间件 存储 监控
消息队列在分布式系统中如何保证数据的一致性和顺序?
消息队列在分布式系统中如何保证数据的一致性和顺序?

相关产品

  • 云消息队列 Kafka 版