Kafka权威指南-学习笔记---第一章

初识Kafka

1.1发布订阅系统

特点:发布者不会直接把消息发送给接收者,这个是发布订阅消息的特点;发布订阅系统一般会有一个broker,也就是发布订阅消息的中心点。
定义:发布者以某种方式对消息进行分类,订阅者订阅他们以便接受待定类型的消息。
Alt
图:发布订阅者模型示意图

1.2 Kafka登场

1.2.1消息和批次

Kafka的数据单元称为消息,可以将消息看做数据库中的一个数据行或者一条记录。消息有字节数组组成。消息中可以有一个可选的元数据。键也为一个字节数组,当消息以一种可控的方式写入不同的分区时,会用到键,例如:我们可以用键生成一个一致性的散列值,然后使用散列值对主题分区数进行取模,为消息选取分区。(具体用法后面会详细介绍)

1.2.2模式

由于Kafka的消息是由字节数组组成的。所以根据应用程序的需求,消息模式有许多可用的选项(例如JSON或者XML)。但是JSON等缺乏强类型的处理能力,不同版本之间兼容性也不是很好,可以选用Apache Avro,一款由Hadoop开发的序列化框架。
数据格式对于Kafka很重要,消除了消息读写操作之间的耦合性。若需升级:则需要先将订阅者进行升级,然后发布者接着进行升级。以便使用新的数据格式。

1.2.3主题和分区

Kafka的消息通过主键进行分类。主题好比数据库中的表,或者为文件系统中的文件夹。主题可以被分为若干个分区,一个分区就是一个提交日志,消息以追加的方式写入分区,然后以先入先出的顺序进行读取。但是一个主题可能会包含几个分区,因此无法在整个主题范围内保证消息的顺序。
Kafka通过分区(Partition)来实现数据冗余以及伸缩性。分区可以分步在不同的服务器上,也就是说,一个主题可以横跨多个服务器,可以来提供比单个服务器更强大的性能。
Alt
图:包含多个分区的主题
我们也可以用来描述Kafka这类系统的数据。流为一组从生产者移动到消费者的数据。

1.2.4生产者和消费者

Kafka的客户端就是Kafka系统的用户,被分为生产者消费者以及用户数据继承的Kafka Connect API和用于流式处理的Kafka Streams
生产者创建消息,一般情况下一个消息会发布到一个特定的主题下。生产者会默认情况下将消息均衡的分步到主题的所有分区上,而并不关心特定消息会写到那个分区。我们可以通过消息键以及分区器来实现吧消息写在指定的分区,分区器为键生成一个散列值,并将其映射到制定的分区上,这样可以保证包含同一个键的消息会被写到同一个分区上。
消费者读取消息,消费者订阅一个或者多个主题,并按照消息生成的顺序进行读取。消费者通过检查偏移量来区别已经读取过的消息。偏移量是另一种元数据,他是一个不断递增的整数值,在创建消息时,Kafka会把他添加到消息中,在给定的分区中,每个消息的偏移量都是唯一的。偏移量会保存在zookeeper中或者Kafka上,如果消费者关闭或者重启,他的读取状态不会丢失。
消费者是消费者群组的一部分,会有一个多个消费者共同读取一个主题,群组保证每个分区只能被一个消费者使用。消费者与分区之间的映射通常被称为消费者对分区的所有权关系
如果一个消费者失效,群组里的其他消费者可以接管失效消费者的工作。
Alt
图:消费者群组从主题读取消息

1.2.5 broker和集群

一个独立的Kafka服务器被称为broker。broker接收来自生产者的消息,为消息设置偏移量,并提交到磁盘中保存。每个broker都可以处理数千个分区以及每秒百万级的消息量。
broker是集群的组成部分。每个集群都有一个broker同时充当了集群控制器的角色,此角色是自动从集群活跃成员中选举出来的。控制器负责管理工作,包括将分区分配给broker和监控broker。
在集群中,一个分区从属于一个broker,该broker被称为分区的首领。一个分区分配给多个broker,这时候会发生分区复制。这种复制机制为分区提供了消息冗余,如果有一个broker失效,则其他的broker就可以接管领导员,这时相关的消费者以及生产者都需要重新连接新的首领。
Alt
消息的保留:Kafka的消息有默认的消息保存策略,要么保留一定的时间,或者保留到一定大小的字节数。当消息达到这个上限时,旧消息就会过期并删除。主题可以设置自己的保存策略。可以将消息保留到不再使用他们为止。

1.2.6多集群

随着Kafka部署数量的增加,基于以下几点原因,最好使用多个集群。

  • 数据类型的分离
  • 安全需求隔离
  • 多数据中心(灾难恢复)
    Kafka提供MirrorMaker,此工具可以用它实现集群间的消息复制(由于Kafka的消息复制机制只能在单个的集群中进行),MirrorMaker的核心组件包含了一个生产者以及一个消费者。两者之间通过一个队列相连。消费者从一个集群读取消息,生产者把消息发送到另一个集群上。如下图所示,两个本地集群将信息集合到一个聚合集群上。
    Alt
    图:多数据中心架构

1.3Kafka的优点

1.3.1多个生产者

可以支持多个生产者,不管客户端在使用单个还是多个主题,并以统一的消息格式对外提供数据。

1.3.2多个消费者

支持多个消费者从一个单独的信息流上读取数据,并且互相不影响。多个消费者可以组成一个群组,共享一个消息流,保证整个群组对于每个给定的消息只能处理一次。

1.3.3基于磁盘的数据存储

可以支持消费者非实时的读取消息,并且可以保证数据不被丢失。

1.3.4伸缩性

可以在开发时用单个的broker,在进行扩展成集群。一个包含多个broker的集群,即使个别的broker失效,仍然可以持续的为客户提供服务。

1.3.5高性能

可以保证在处理大量数据的同时,他还能保证亚秒级的消息延时。

1.4数据生态系统

Alt
使用场景

  • 活动跟踪
    跟踪用户的活动,例如添加用户资料,这些消息被发送到一个或者多个主题,由后端应用程序进行读取。这样就可以生成报告,为机器学习系统提供数据,或者实现其他的功能。
  • 传递消息
    应用读取消息之后可以进行以下处理:格式化消息;将多个消息放在同一个通知进行发送;根据用户配置的首选项来发送通知。
  • 度量指标以及日志记录
    可以将应用程序的度量指标发送到Kafka上,提供给监控系统或者告警系统服务消息。
  • 提交日志
    可以将数据库的更新日志发布到Kafka上,应用程序通过监控事件流来接收数据库的实施更新。
  • 流处理

参考文献:
《kafka权威指南》人民邮电出版社

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值