浅谈开源Kafka与腾讯云cKafka

今天下午参加了腾讯云+社区组织的kafka公开课,收获良多。正巧在工作中也遇到过kafka的问题,今天听完之后产生了非常多的感想。无奈篇幅有限,本人又文笔愚钝,所以今天的分享主要提及对我感触最深的内容。分享的顺序还是按照老形式来进行吧(提出疑问——解决疑问)

【提出疑问】

1、为什么要设计kafka?

2、开源的kafka架构是怎么样的?

3、腾讯云的ckafka架构是怎样的?

4、腾讯云的ckafka架构解决了什么样的问题?

5、我对开源kafka的设想?

一、为什么要设计kafka?

扩容性

过去生产消费模型采用的消息队列一般为RabbitMQ、ZeroMQ(最快)等。这些消息队列对于数据的处理量存在一个上限,也就是说随着信息化的数据爆炸式增长会出现一个吞吐量的瓶颈。下图是我在网上找的图,表示的是以往消息队列的形式。过去MQ的瓶颈存在的原因在于这个队列不能很好的支持扩容。举个通俗点的例子来说过去的MQ是一条乡间小路,路的大小是事先设计好的。而kafka则是一条高速公路,且这条高速公路可以根据业务的需求进行扩展(流量大时采用5车道,闲时采用2车道)。因此这同时也是一种非常节约资源的解决方案。

统一处理

上图表示的是以前的处理方式。举个案例来说,现在公司里有两个数据源(oracle和mysql),我需要给每个业务都定义一个使用数据库的接口。然而随着公司业务的不断扩展,数据源的种类越来越多,添加了诸如redis等,同时业务的变更也扩展地非常快。这时如果对每个业务都编写一个接口就会显得非常麻烦。kafka则可以很好的应对上述场景,这也是基于避免重复造轮子的思想。

上图是简单的kafka架构。kafka的开源版本里提供了很多数据源的接口,业务只需要对kafka集群进行连接就可以实现对数据的抓取。与此同时,kafka集群还可以进行对数据的筛选。也就是后面会提到的日志存储。

二、开源的kafka架构是怎么样的?

  • Broker

Kafka集群包含一个或多个服务器,这种服务器被称为broker

  • Topic

每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)

  • Partition

Parition是物理上的概念,每个Topic包含一个或多个Partition.

  • Producer

负责发布消息到Kafka broker

  • Consumer

消息消费者,向Kafka broker读取消息的客户端。

  • Consumer Group

每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)。

topic&partition理解

每个topic都可以看成是一个队列,消费必须指定它的topic。为了使得Kafka的吞吐率可以线性提高,物理上把Topic分成一个或多个Partition,每个Partition在物理上对应一个文件夹,该文件夹下存储这个Partition的所有消息和索引文件。

日志存储

开源kafka的日志存储可以实现数据解耦、多消费者读取等功能。如下图所示

对于传统的message queue而言,一般会删除已经被消费的消息,而Kafka集群会保留所有的消息,无论其被消费与否。当然,因为磁盘限制,不可能永久保留所有数据(实际上也没必要),因此Kafka提供两种策略删除旧数据。一是基于时间,二是基于Partition文件大小。

HA

为了提高Kafka的容错能力,需要将同一个Partition的Replica尽量分散到不同的机器。如果某个Broker宕机了,需要保证它上面的负载可以被均匀的分配到其它幸存的所有Broker上。此外,还涉及了投票选举机制。也就是说当一个leader挂了之后会投票选出一个新leader。(具体机制改天再整理出个详细的文档)。

开源的kafka架构是将各个topic冗余备份分步到各个broker上,当一个broker挂了之后能够很快的根据备份信息恢复。

数据筛选

开源kafka支持sql、java、python等语言的过滤程序。下图是基于sql改良的ksql

三、腾讯云的ckafka架构是怎样的?

腾讯云ckafka项目在开源kafka项目的基础上做了很多的改进,下图是ckafka的特点

ckafka的现状

1、日消息超万亿条、总流量数十PB级,单集群每分钟达十亿

2、broker数量上千,集群有上百个

3、服务付费实例超千个,topic也过千

总的来说就是日消息量、日吞吐量、集群分钟吞吐量都非常庞大

broker的选择

新建实例时,如何选择broker才能保证资源的充分利用?针对这一问题,腾讯云是基于带宽和磁盘容量来判断的。会根据broker中存储的topic类别,来存放最类似的topic到这个集群。

实例的升配

在升配方面,首先会预估节点变更的可能性和资源的利用率,其次会计算迁移的代价。也就是当容量不够的时候存在两种情况:1、分区节点有冗余,这种情况会直接升级2、broker资源不足,这时就要进行迁移重新划分资源。当新节点加入后还需要进行机器的负载均衡、节点资源的碎片整理。

实例的迁移

据我的感受而言,腾讯云在迁移方面做的是最好的。大概存在三种情况会需要迁移:服务异常、实例扩缩容、负载均衡。

迁移又涉及到三种情况:

1、leader迁移:数据迁移代价较小,可能会造成cpu负载及网卡出流量

2、replica迁移:代价比较大,会消耗非常多的机器资源

3、迁移对象和目的地的考量:数据大小、生产/消费速率、资源利用率

四、腾讯云的ckafka架构解决了什么样的问题?

我印象最深的主要有3点改良:

1、在高负载情况下的调优

2、增强了容错机制

3、增强了故障处理机制

五、我对开源kafka的设想?

就我愚见,目前kafka在故障应对机制方面还不是很强。现在只能做到事故发生后再处理。如果能够事先收集各种故障的信息,进行数据分析,使其能够在故障前自动的处理就能够将故障扼杀在摇篮中。

由此略微展开联想,可以设计一种信息收集组件并提供自定义行为接口,用户能够自行通过接口设计故障前的行为。这也是我对未来运维的展望——工程师能够专注于处理隐患机器,故障判断交予机器。

原文地址:http://blog.51cto.com/12814931/2130731

时间: 2024-10-10 23:33:25

浅谈开源Kafka与腾讯云cKafka的相关文章

浅谈开源类库EventBus的消息机制

EventBus是基于Otto的消息发送机制,经过开源大神们的封装,已经越来越好用了. 发送消息(必须在主线程中发送消息,发消息可以不用注册bus) EventBus.getDefault().post(); 接受消息(必须在主线程中接受消息,接受消息必须注册bus) public void onEvent() {} 注册bus EventBus.getDefault().register(this); ex: package com.woyou.utils.eventbus; /** * ot

突破、进化,腾讯云数据库2018全年盘点

在企业上云逐渐加速的背景下,云数据库作为企业重要的IT基础设施,其重要性毋庸置疑.各大云计算厂商不惜重金,纷纷在产品和技术层面加大布局,争夺这一重要的云服务市场.纵观国内前几大云服务商过去一年的云数据库领域的发展,腾讯云基于自身强大的业务支撑以及技术研发实力,在云数据库市场的突破格外引人注目. 具体来说,针对存量市场,2018年下半年,腾讯云重磅推出云原生数据库CynosDB,该款数据库的单节点读性能达到惊人的130万QPS,超过业内目前最高100万QPS水平,而价格只是市面上商业数据库的1/1

腾讯云数据库团队:浅谈如何对MySQL内核进行深度优化

作者介绍:简怀兵,腾讯云数据库团队高级工程师,负责腾讯云CDB内核及基础设施建设:先后供职于Thomson Reuters和YY等公司,PTimeDB作者,曾获一项发明专利:从事MySQL内核开发工作8年,具有丰富的优化经验:在分布式存储等领域有较丰富经验. MYSQL数据库适用场景广泛,相较于Oracle.DB2性价比更高,Web网站.日志系统.数据仓库等场景都有MYSQL用武之地,但是也存在对于事务性支持不太好(MySQL 5.5版本开始默认引擎才是InnoDB事务型).存在多个分支.读写效

浅谈云巴实时通信的编程模型

浅谈云巴实时通信的编程模型 中国物联网 2016-09-28 09:38 概要 有人常问,云巴实时通信系统到底提供了一种怎样的服务,与其他提供推送或 IM 服务的厂商有何本质区别.其实,从技术角度分析,云巴与其它同类厂商都是面向开发者的通信服务,宏观的编程模型都是大同小异,真正差异则聚焦于产品定位,业务模式,基础技术水平等诸多细节上.本文暂不讨论具体产品形态上的差异,着重从技术角度浅谈实时通信的编程模型. 什么是实时通信 「实时」(realtime) 一词在语义层面上隐含着对时间的约束(real

浅谈分布式消息技术 Kafka

http://www.linkedkeeper.com/1016.html Kafka的基本介绍 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志.访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目. 主要应用场景是:日志收集系统和消息系统. Kafka主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化

浅谈分布式消息技术 Kafka(转)

一只神秘的程序猿. Kafka的基本介绍 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志.访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目. 主要应用场景是:日志收集系统和消息系统. Kafka主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能.

搞懂分布式技术21:浅谈分布式消息技术 Kafka

搞懂分布式技术21:浅谈分布式消息技术 Kafka 浅谈分布式消息技术 Kafka 本文主要介绍了这几部分内容: 1基本介绍和架构概览 2kafka事务传输的特点 3kafka的消息存储格式:topic和parition 4副本(replication)策略:主从broker部署和partition备份,以及选主机制 5kafka消息分组,通过comsumergroup实现主体订阅 6push和pull的区别,顺序写入和消息读取,零拷贝机制 Kafka的基本介绍 Kafka是最初由Linkedi

MySQL之父造访腾讯云 为腾讯云数据库开源点赞

近日,技术大牛 MariaDB 公司创始人兼CTO Michael Widenius(又名Monty).MariaDB 基金会主席 Kaj 来到中国,针对MariaDB与腾讯云的技术合作进行回访.去年底,腾讯云与MariaDB基金会达成战略合作,腾讯云承诺为基金会的发展提供强有力的资源支持,共建全球开源生态圈. 这次会见,腾讯云与MariaDB就未来的双向合作达成一致.后续,在不涉及腾讯云核心代码的前提下,腾讯云将优先提交代码给MariaDB 基金会, 双方共享使用权.同时,MariaDB也将积

【开源】浅谈Hybrid技术的设计与实现第二弹

前言 接上文:浅谈Hybrid技术的设计与实现(阅读本文前,建议阅读这个先) PS:据说加个开源在前面阅读量高点,于是就试试咯...... 上文说了很多关于Hybrid的概要设计,可以算得上大而全,有说明有demo有代码,对于想接触Hybrid的朋友来说应该有一定帮助,但是对于进阶的朋友可能就不太满足了,他们会想了解其中的每一个细节,甚至是一些Native的实现,小钗这里继续抛砖引玉,希望接下来的内容对各位有一定帮助. 进入今天的内容之前我们首先谈谈两个相关技术Ionic与React Nativ