竹笋

注册

 

发新话题 回复该主题

玩了分布式这么久,你不会连Kafka都不 [复制链接]

1#
中科白癜风医院微博 http://www.txbyjgh.com/

Kafka现在在企业和互联网项目中的应用越来越多了,本篇文章就从Kafka的基础开始带你一展Kafka的宏图。

图片来自Pexels

什么是Kafka

Kafka是一个分布式流式平台,它有三个关键能力:

订阅发布记录流,它类似于企业中的消息队列或企业消息传递系统。以容错的方式存储记录流。实时记录流。

Kafka的应用:

作为消息系统。作为存储系统。作为流处理器。

Kafka可以建立流数据管道,可靠地在系统或应用之间获取数据。建立流式应用传输和响应数据。

Kafka作为消息系统

Kafka作为消息系统,它有三个基本组件:

Producer:发布消息的客户端Broker:一个从生产者接受并存储消息的客户端Consumer:消费者从Broker中读取消息

在大型系统中,会需要和很多子系统做交互,也需要消息传递,在诸如此类系统中,你会找到源系统(消息发送方)和目的系统(消息接收方)。

为了在这样的消息系统中传输数据,你需要有合适的数据管道:

这种数据的交互看起来就很混乱,如果我们使用消息传递系统,那么系统就会变得更加简单和整洁。

Kafka运行在一个或多个数据中心的服务器上作为集群运行:

Kafka集群存储消息记录的目录被称为Topics。每一条消息记录包含三个要素:键(Key)、值(Value)、时间戳(Timestamp)。

核心API

Kafka有四个核心API,它们分别是:

ProducerAPI,它允许应用程序向一个或多个Topics上发送消息记录。ConsumerAPI,允许应用程序订阅一个或多个Topics并处理为其生成的记录流。StreamsAPI,它允许应用程序作为流处理器,从一个或多个主题中消费输入流并为其生成输出流,有效的将输入流转换为输出流。ConnectorAPI,它允许构建和运行将Kafka主题连接到现有应用程序或数据系统的可用生产者和消费者。例如,关系数据库的连接器可能会捕获对表的所有更改。

Kafka基本概念

Kafka作为一个高度可扩展可容错的消息系统,它有很多基本概念,下面就来认识一下这些Kafka专属的概念。

Topic

Topic被称为主题,在Kafka中,使用一个类别属性来划分消息的所属类,划分消息的这个类称为Topic。

Topic相当于消息的分配标签,是一个逻辑概念。主题好比是数据库的表,或者文件系统中的文件夹。

Partition

Partition译为分区,Topic中的消息被分割为一个或多个的Partition,它是一个物理概念,对应到系统上就是一个或若干个目录,一个分区就是一个提交日志。消息以追加的形式写入分区,先后以顺序的方式读取。

注意:由于一个主题包含无数个分区,因此无法保证在整个Topic中有序,但是单个Partition分区可以保证有序。消息被迫加写入每个分区的尾部。Kafka通过分区来实现数据冗余和伸缩性。

分区可以分布在不同的服务器上,也就是说,一个主题可以跨越多个服务器,以此来提供比单个服务器更强大的性能。

Segment

Segment被译为段,将Partition进一步细分为若干个Segment,每个Segment文件的大小相等。

Broker

Kafka集群包含一个或多个服务器,每个Kafka中服务器被称为Broker。Broker接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。

Broker为消费者提供服务,对读取分区的请求作出响应,返回已经提交到磁盘上的消息。

Broker是集群的组成部分,每个集群中都会有一个Broker同时充当了集群控制器(Leader)的角色,它是由集群中的活跃成员选举出来的。

每个集群中的成员都有可能充当Leader,Leader负责管理工作,包括将分区分配给Broker和监控Broker。

集群中,一个分区从属于一个Leader,但是一个分区可以分配给多个Broker(非Leader),这时候会发生分区复制。

这种复制的机制为分区提供了消息冗余,如果一个Broker失效,那么其他活跃用户会重新选举一个Leader接管。

Producer

生产者,即消息的发布者,其会将某Topic的消息发布到相应的Partition中。

生产者在默认情况下把消息均衡地分布到主题的所有分区上,而并不关心特定消息会被写到哪个分区。不过,在某些情况下,生产者会把消息直接写到指定的分区。

Consumer

消费者,即消息的使用者,一个消费者可以消费多个Topic的消息,对于某一个Topic的消息,其只会消费同一个Partition中的消息。

在了解完Kafka的基本概念之后,我们通过搭建Kafka集群来进一步深刻认识一下Kafka。

确保安装环境

安装Java环境

在安装Kafka之前,先确保Linux环境上是否有Java环境,使用java-version命令查看Java版本,推荐使用Jdk1.8。

如果没有安装Java环境的话,可以按照这篇文章进行安装:

分享 转发
TOP
发新话题 回复该主题