开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内,可以解决你的问题。加群请联系 liuaustin3 ,(共1790人左右 1 + 2 + 3 + 4 +5) 4群(290+),另欢迎 OpenGauss 的技术人员加入。
这可能是一个童话故事,一个关于企业在寻找更好的数据库产品,更好的扩展性的数据库产品,并与当前传统型数据库进行割裂的故事,故事的开始一个负责找寻更新数据库解决方案的团队,对于Kafka 产生了兴趣,并对我说,我们发现了一个当前数据库不具有的功能在kafka中可以实现,他的速度更快,并可以快速扩展,并且这个团队将kafka设置为他们的数据库,并希望通过他来替代现有的数据库产品,来进行数据的查询,存储检索等,并把他们所有的数据都放到里面。
但核心的问题在于kafka他不是一个数据库,我是这样认为的,将其作为数据库并不能解决他们所有的曾经遇到的数据库无法解决的问题,包括扩展性和性能的问题。
什么是误导这些开发人员认为kafka是一个合格的数据库,一般开发人员通常认为数据库是一个带有辅助索引,和表的数据存储和数据处理的方案,大多数的SQL和NOSQL解决方案中的数据库产品就是这样,同时他们对于数据库的另一个需求,ACID并不是很清楚,原子性,一致性,隔离性,持久性等。当然一些开发人员对于什么来定义数据库也认为应该被挑战,这些数据库的传统思维模式一直在被挑战,比如REDIS 没有表,RocksDB没有辅助索引,这些产品都不符合ACID,同时他们也被称为数据库。同样 Cassandra 也被称为NoSQL数据库,同时他也不符合ACID。
这里我明确我的观点,我不认为kafka是数据库,并且在很多场景不应该被当做数据库应用,同时我也敢说在更多的一些开源社区包含kafka社区也有相同的观点。
首先kafka没有数据查询语言,虽然你可以访问特定时间的特定的记录,或者通过偏移量来进行数据增量的访问,但他不能代替索引和表,Kafka是不符合ACID,尽管可以将kafka 用作数据存储或创建自己的版本,但kafka本身不是数据库。
那么kafka到底应该在哪里应用,kafka本身作为分布式事件流平台中的核心组成部分,他可以长期作为数据保存的基础设施,当然可以通过kafka生态中的一些工具让kafka更像一个数据库比如ksqlDB,但这样的用法智能应用于中等规模的用例,选择实施kafka的大多数企业都拥有大量的数据流,并且ksqlDB无法满足此类应用的需求。
正确的策略是让kafka发挥其擅长的作用,以快速而可靠的方式来获取和分发事件,如考虑一个具有API电子商务网站,传统上将所有数据直接保存到关系型数据库中的表格中,但性能,伸缩性,可用性很多开发者认为都比较差,在引入kafka后,可以设计更好的以事件驱动的系统,并将数据从API推送到kafka中,这种以事件为驱动的方法将处理数据分为单独的组件,一个时间可能饱含客户的数据,另一个饱含订单的数据,以此类推,让多个工作可以同时独立作为事件来进行处理,这种方法是企业架构的下一个演变的阶段,从单块的架构发展到微服务,以事件为驱动的架构,具有更高的可用性和更快的速度,同时也收获了微服务的架构的好处。
一旦时间存储在Kafka中,就可以通过灵活的数据处理能力,将原始事件存储在关系数据库中,可以使用kafka connect 等生态工具来将工作变得简单,现代的企业架构中,关系数据库是关键的一环,尤其在考虑熟悉的工具和成熟的生态系统的优势等,kafka 不是我们熟悉的和熟知的数据库工具或数据库的替代品。
同时kafka具有在启动数据聚合和实时数据处理中提供最大化的价值,使用kafka 和相关的 spark , Flink, Kstreams 等,开发人员对于流数据执行聚合和转换,然后将数据推送到所需的数据库中,其中一些工具还可以以时间为窗口方式聚合数据,并将其推送到用户实时指标的报告引擎中。
如果开发人员希望将数据保存到缓存,如CRM客户关系类系统,只需要通过kafka数据流并将数据推送到redis 或kafka中即可,这里只需要将数据流传送到kafka 并分传到各个组件中,无需担心服务的任何降级,因为kafka是可以进行数据的伸缩,并具有可靠性和可用性,还可以通过他将数据传送到任何数据存储中,无论是大数据,数据湖,或其他什么。
如果数据是现代企业的生命线,kafka应该是数据生态系统中的一个核心,通过使用kafka可以将数据传输到任何需要到达的地方,从这个角度看kafka是对数据流转的补充,但他不是数据库也不应该称为数据库,kafka的定位应该是强大的信息代理和数据管道。
版权归原作者 Austindatabases 所有, 如有侵权,请联系我们删除。