数据库、hbase、kafka

一、数据库

1.简介

目前数据库产品有300+多种,数据库产品繁多,但是在在进行数据库产品的选择的时候我们主要考虑成本低,可用高,易维护,满足业务需求的条件下进行高效选择。 当前的数据库产品又可以分为关系型和非关系型数据库,关系数据库主要选择流行的产品Oracle, MySQL , SQL Serve 等,对于非关系型数据库,列式存储的数据库主要有MongoDB,Hbase等。

2.数据库的选择

  • 根据特性:可靠性、可扩展性、成本(Oracle ,DB2 ,SQL Server 等都是企业级的商业数据库,提供了很强的可用性和安全性,但是需要企业去花费大量的财力去购买产品许可证和服务。而MySQL 和 postgreSQL 均有基于社区发布的社区版,可以提供企业用户免费使用,基于庞大的用户群体,功能和稳定性也很强,从而给企业节省了大量的采购成本。)
  • 根据业务等级

金融数据库对数据一致性,可用性要求相对比较高,基本都属于P0的业务,包括支付订单类型系统,白条核心系统,白条账务等都属于核心的业务等级,这样的业务一般使用MySQL的分库分表,读写分离的方案,有效的提升系统的吞吐量。

根据数据等级要求(P0-P4):数据库选择流程:

(1)关系型数据库(P0-P3)

  1. 确认数据库的应用等级。
    1. P0-P3 业务选择MySQL
    2. P4系统可以选择NoSQL , Hbase/MongoDB/CK/TiDB/数据中心
  2. 确认需要的存储空间和TPS/QPS,参考 "硬件基础资源"
    1. 预计1年的总数据量小于6T可以选择物理机的一主一从。(尽量不选择MHA架构,因为不能满足自动跨机房切换)
    2. 如果1年的数据量大于6T,需要考虑分库分表,分布式StarDB。
  3. 确认分库分表
    1. 如果单表数据量大于2kw,选择分库分表,可以使用CDS或者StarDB
    2. 对于读取量大的系统,可以增加从库进行读写分离。

(2)非结构化存储数据(P4)

  1. ? 可以选择MongoDB,Hbase等
    1. 文档类型数据库选择MongoDB
    2. Key-Value 类型的选择Hbase
  2. 分析统计类系统,P4类系统,选型ClickHouse
    1. CK 为列式存储,对于count,group by 有很大的优化。
  3. 运营类型系统,可以选择使用 “数据中心”

?

二、hbase

1. hbase是什么

答:HBase是一个分布式的、面向列的开源数据库。

2.hbase的特点

  • HBase在Hadoop之上提供了类似于Bigtable的能力。
  • HBase是Apache的Hadoop项目的子项目。
  • HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。
  • 另一个不同的是HBase基于列的而不是基于行的模式。

3.hbase的原理

  • 数据会先写到内存中,为了防止内存数据丢失,写内存的同时需要持久化到磁盘,对应了HBase的MemStore和HLog;
  • MemStore中的数据达到一定的阈值之后,需要将数据刷写到磁盘,即生成HFile(也是一颗小的B+树)文件;
  • hbase中的minor(少量HFile小文件合并)major(一个region的所有HFile文件合并)执行compact操作,同时删除无效数据(过期及删除的数据),多棵小树在这个时机合并成大树,来增强读性能。

4.hbase适用场景

  • 由于Hbase 是LSM树结构,牺牲了部分的读性能,大幅提高写性能,所以Hbase 适合写多读少的场景。

?

三、kafka

1.kafka是什么

答:Kafka是一个分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。

2.kafka特点

(1) 高吞吐量。据了解,Kafka每秒可以生产约25万条消息(50 MB),每秒处理55万条消息(110 MB)。

(2) 持久化。将消息持久化到磁盘,因此可用于批量消费,例如ETL,以及实时应用程序。通过将数据持久化到硬盘以及replication防止数据丢失。

(3) 分布式系统。所有的producer、broker和consumer都会有多个,均为分布式的。?????

(4) 可扩展性。kafka使用zookeeper来实现动态的集群扩展,不需要更改客户端(producer和consumer)的配置。broker会在 zookeeper注册并保持相关的元数据(topic,partition信息等)更新。而客户端会在zookeeper上注册相关的watcher。?????

3.Kafka中角色与术语

  • Producer? ? ? ? ? 向kafka中发布消息的进程
  • Comsumer? ? ? ?从Kafka中订阅消息的进程
  • Broker? ? ? ? ? ? ? ?Kafka集群中每一个kafka服务
  • Topic? ? ? ? ? ? ? ? ?保存在Kafka中的每一类消息

? 它们之间的数据流程如右图所示

数据库、hbase、kafka

  • Partition? ? ? ? ? ? ?每一个topic可以被分成多个partition(分区)

Kafka集群中维护的partitions如图所示:

数据库、hbase、kafka

  • Replication

???? 一个partition可以有多个备份,默认为1。

  • Leader/Follower

???? 每个partition都有一个唯一的leader,所有的读写操作都在leader上完成。

  • Offset

? 每个消息在partition中的位置叫做offset。

  • Consumer Group

? 同一个Consumer Group中的consumers,Kafka将相应Topic中每个消息只发送给其中一个Consumer。

4.Kafka系统架构

数据库、hbase、kafka

kafka是显式分布式架构,producer、broker(Kafka)和consumer都可以有多个。

Kafka的作用类似于缓存,即活跃的数据和离线处理系统之间的缓存

5.相关文档

?

?

上一篇:安装deepin15.10下的openjdk-8


下一篇:OpenJDK 17 中的 Shenandoah:亚毫秒级 GC 停顿「译」