TiDB一个大数据实时计算的存储利器

Posted 云台095

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TiDB一个大数据实时计算的存储利器相关的知识,希望对你有一定的参考价值。

目录

TiDB概述

TiDB架构详解

TiDB之TiKV

TiDB如何部署

具体安装流程

下载二进制文件

使用Docker镜像

一些配置解析

Server 配置

Performance 配置

Log 配置

PD 配置



TiDB概述

TiDB是由中国PingCAP公司开发的,是一个开源的分布式NewSQL数据库。它最初的设计目标是解决传统关系型数据库的瓶颈和限制,实现高可用、可扩展和高性能的数据存储和处理。

TiDB架构详解

TiDB是一个分布式的NewSQL数据库,其核心架构包括三个组件:TiDB Server、TiKV和PD。

  1. TiDB Server:是TiDB的SQL层,提供mysql兼容的协议和接口。它的主要功能是接收和处理客户端的SQL请求,并将这些请求转化为对下层存储引擎TiKV的操作。TiDB Server还包括查询优化器、执行引擎、事务管理等模块,以支持更高效和可靠的数据访问。

  2. TiKV:是TiDB的存储引擎,采用分布式、自动分片的方式管理数据。TiKV将数据分散存储在多个节点上,每个节点负责一部分数据的存储和处理。它支持ACID事务、强一致性和高可用性,并提供灵活的配置选项以适应各种工作负载需求。

  3. PD:是TiDB的元数据管理组件,负责存储TiKV集群的拓扑信息、负载均衡、故障恢复等任务。PD通过选举算法来选举集群中的Leader节点,保证系统的高可用性和容错性。

总的来说,TiDB的核心架构采用了分布式的方式来存储和管理数据,通过多个组件协同工作来实现数据的高可靠性和高可用性,支持大规模数据处理和高并发访问。

TiDB之TiKV

TiKV是一个分布式的、高可用的Key-Value存储引擎,主要用于存储和处理TiDB的数据。TiKV的原理如下:

  1. 分布式存储:TiKV采用分布式存储,将数据分散存储在多个节点上。每个节点负责一部分数据的存储和处理。节点之间采用Raft协议进行通信,实现数据的副本同步和容错。同时,TiKV支持水平扩展,可以通过添加新节点来扩展存储能力。

  2. 数据模型:TiKV采用Key-Value模型,每个Key对应一个Value。Key和Value都是二进制数据,没有固定的格式和结构。用户可以根据需要定义自己的Key和Value结构。

  3. 强一致性:TiKV采用Raft协议实现数据的副本同步和容错,保证数据的强一致性。在一个Raft组中,每个节点有三种角色:Leader、Follower和Candidate。Leader负责处理客户端的读写请求,并将请求转发给其他节点。Follower和Candidate负责接收Leader发送的请求,并对请求进行确认和同步。

  4. 事务支持:TiKV支持ACID事务,提供类似于关系数据库的事务语义。TiKV的事务分为两个阶段:预写日志(write-ahead log)和提交。预写日志阶段将事务的写操作记录到日志中,提交阶段将事务的写操作应用到实际数据中。TiKV采用MVCC(多版本并发控制)机制来实现事务的隔离性和一致性。

  5. 高性能:TiKV通过多种优化手段来提高性能。其中,一种重要的优化是数据的分层存储,将热点数据存储在内存中,将冷数据存储在磁盘中。另外,TiKV还支持多种读写优化策略,如批量读写、异步读写、前缀扫描等。

总的来说,TiKV通过分布式存储、强一致性、事务支持和高性能等特性,实现了一个高可用的、可扩展的Key-Value存储引擎,可以满足大规模数据存储和处理的需求。

TiDB如何部署

关于如何部署TiDB,一般可以分为以下几个步骤:

  1. 安装TiDB集群:可以通过官方提供的二进制包或Docker镜像来安装TiDB集群。安装过程中需要配置节点信息、端口号、集群拓扑等参数,以及设置相应的用户名和密码。

  2. 配置TiDB参数:安装完成后,需要对TiDB进行相应的参数配置。其中,包括数据库连接、SQL模式、存储引擎、事务隔离级别等。配置过程中需要根据具体需求进行相应的调整。

  3. 导入数据:TiDB支持从MySQL、CSV、TiKV等数据源中导入数据。可以使用TiDB提供的工具或第三方工具进行数据导入。

  4. 进行数据管理和维护:对于已经部署和运行的TiDB集群,需要进行相应的数据管理和维护工作。其中,包括备份和恢复、性能调优、故障排除等。

总的来说,TiDB的部署相对比较简单,而且官方提供了详细的文档和工具,帮助用户进行快速部署和维护。同时,TiDB还提供了丰富的API和插件接口,支持用户自定义开发和扩展。

具体安装流程

安装TiDB需要下载二进制文件或使用Docker镜像,下面分别介绍两种安装方式。

下载二进制文件

  1. 从官方网站 https://pingcap.com/zh/download/ 下载适用于您的操作系统和 TiDB 版本的二进制文件。

  2. 解压缩二进制文件,并将其复制到每个节点的 $PATH 目录下。比如:

    $ tar -xzf tidb-v4.0.0-linux-amd64.tar.gz $ sudo cp -r tidb-v4.0.0-linux-amd64/bin/* /usr/local/bin/
  3. 配置TiDB参数。TiDB参数配置文件的位置默认为/etc/tidb/tidb.toml。可以从默认的配置文件/etc/tidb/tidb.toml.example复制并修改成自己需要的配置文件。比如:

    $ sudo cp /etc/tidb/tidb.toml.example /etc/tidb/tidb.toml $ sudo vim /etc/tidb/tidb.toml
  4. 启动TiDB。可以使用systemd启动TiDB。比如:

    $ sudo systemctl enable tidb.service $ sudo systemctl start tidb.service

使用Docker镜像

  1. 安装Docker。Docker的安装可以参考官方文档 https://docs.docker.com/engine/install/。

  2. 下载TiDB镜像。可以在Docker Hub上搜索TiDB并下载。

    $ docker pull pingcap/tidb:latest
  3. 启动TiDB容器。比如:

    $ docker run -d --name tidb-server -p 4000:4000 pingcap/tidb:latest
  4. 配置TiDB参数。可以将TiDB配置文件挂载到容器中。比如:

    $ docker run -d --name tidb-server -p 4000:4000 -v /path/to/tidb.toml:/etc/tidb/tidb.toml pingcap/tidb:latest

更加详细的安装和配置文档可以参考TiDB官方文档 https://docs.pingcap.com/zh/tidb/stable/quick-start-with-tidb#step-1-下载-tidb。

同时,官方文档也提供了更加详细的参数配置、运维、备份等方面的文档,方便用户使用和维护TiDB。

一些配置解析

当您安装 TiDB 后,需要对 TiDB 进行一些基本的配置,其中最重要的是 tidb.toml 配置文件。tidb.toml 配置文件包含了 TiDB 集群的大多数配置参数。以下是 tidb.toml 文件的一些重要配置项。

Server 配置

[server] 配置项定义了 TiDB 服务器的网络、调度和统计信息等参数。

  • port: TiDB 的监听端口,默认值为 4000。
  • status-port: TiDB 的状态监控端口,默认值为 10080。
  • advertise-address: TiDB 服务器所在主机的 IP 地址,默认为空字符串。当多个 TiDB 实例运行在同一主机上时,需要设置该值以确保它们使用正确的 IP 地址进行通信。
  • socket: TiDB 监听的 Unix 套接字文件路径,如果设置该参数,则会忽略 port 参数。默认值为空字符串。
  • log-level: TiDB 日志输出的级别,默认值为 info。
  • log-file: TiDB 日志输出到的文件名,默认值为标准输出。
  • slow-query-file: 记录 TiDB 慢查询日志的文件名,默认值为 tidb-slow.log。
  • max-index-length: TiDB 索引键的最大长度,默认为 3072 字节。

Performance 配置

[performance] 配置项定义了 TiDB 在处理大量请求时的行为和策略。

  • max-procs: TiDB 使用的最大 CPU 数量,默认值为 0,表示使用所有可用的 CPU。
  • max-memory: TiDB 使用的最大内存数量,默认值为 0,表示使用所有可用的内存。如果设置了该值,当 TiDB 的内存使用超过了该阈值时,将会触发 Out-Of-Memory (OOM) 错误。
  • stats-lease: TiDB 统计信息的租约时长,单位为秒,默认值为 3。
  • stmt-count-limit: TiDB 限制在内存中缓存的语句数,默认值为 5000。当 TiDB 的内存使用超过了该阈值时,将会删除较早的查询计划缓存。

Log 配置

[log] 配置项定义了 TiDB 日志记录的相关参数。

  • level: TiDB 日志输出的级别,默认值为 info。
  • format: TiDB 日志输出的格式,默认值为 text。
  • disable-timestamp: 是否禁用 TiDB 日志输出的时间戳,默认值为 false。
  • file: TiDB 日志输出到的文件名,默认为空字符串。如果设置该值,则会忽略 levelformat 和 disable-timestamp 参数。
  • rotation-time: TiDB 日志轮换的时间间隔,默认值为 86400 秒(1 天)。
  • rotation-size: TiDB 日志轮换的文件大小,默认值为 100 MiB。

PD 配置

[pd] 配置项定义了 TiDB 集群

Storm实战_构建大数据实时计算

Storm实战 构建大数据实时计算


ZeroMQ

sudo yum install maven

1简介

  • 使用场景

    1. 实时分析
    2. 在线机器学习
    3. 持续计算
    4. 分布式RPC
    5. ETL
      保证每个消息都得到处理,速度快每个节点每秒百万次消息.
  • 实体

    1. 工作进程:每台机器上多个
    2. exector:每个进程多个
    3. 任务:每个exector多个任务
      spot bolt

    storm 0.7版本引入事物拓扑解决,严格要求每个事物仅处理一次.

    • 多语言协议,每个tuple处理时需要进行JSON编解码.吞吐量有影响
    • ZeroMQ作为底层消息对列,消息快速处理.
      ZeroMQ是一个为可伸缩的分布式或并发应用程序设计的高性能异步消息库。但是与面向消息的中间件不同,ZeroMQ的运行不需要专门的消息代理(message broker)。该库设计成常见的套接字风格的API。ZeroMQ是由iMatix公司和大量贡献者组成的社区共同开发的。ZeroQ通过许多第三方软件支持大部分流行的编程语言,从Java和Python到Erlang和Haskell。
  • 支持动态增加节点,但是现有的任务不会自动负载均衡.
  • 图形化监控
  • 中间状态查询与存储

    1. 处理流的结果,无法直接取得.导入MySQL或HBase中.
    2. 计算逻辑类的快照,便于错误恢复.
      但是有些业务需要保存中间状态,利用MySQL实时存储中间状态.崩溃从最近状态恢复.将数据源存储到HBase中,恢复后取出未处理的结果.利用HBase支持前后定位.

2Storm初体验

  • 节点类型

    • 主控节点master
      Nimbus的后台程序,分发代码,分配任务,监控状态.
    • 工作节点 worker
      运行一个Supervisoer后台程序,监听Nimbus分配的任务.启动或停止进程.
      一个Topology由分布在不同工作节点上的多个工作进程组成.
      Nimbus和Supervisoer间协调通过zookeeper

    Nimbus和Supervisoer是快速失败和无状态.结束后,要么在zookeeper要么在硬盘上,拥有不可思议的稳定性.

3构建Topology

  • Topology
    Topology不会结束,MR会结束.
    Topology时Thrift(跨语言框架).

  • 一个消息流就是一个没有边界的tuple抽象.
  • sqout

    1. 方法nextTuple()发射一个tuple到topology中.nextTuple()不能被阻塞,UI个exector调用所有消息源的spout方法.
    2. ack()tuple成功处理
    3. fail()tubples处理失败.
      只对可靠的spout调用ack和fail
  • Bolts
    所有的消息处理逻辑.

    • 过滤
    • 聚合
    • 查询数据库

      1. OutputFieldsDeclarer.declareStream()定义stream.
      2. OutputCollector.emit()选择发射的Stream
      3. execute处理tuple.
      4. OutputCollector发射tuple.为每个处理的tuple调用ack方法.通知storm该tuple处理完毕.
  • Stream Grouping
    Stream Grouping 定义一个stream如何分配bolts上面的多个task.

7种类型的Stream Grouping

  1. shuffle 随机,每个bolt数目大致相同
  2. fields 字段分组
  3. all 广播发送,每个tuple所有的bolts收到
  4. global 全局分组,tupe分配到id值最低的task
  5. non 随机,放到bolt的同一个exector执行.
  6. direct 直接,特备.指定接受者的task
  7. local or shuffle bolt有1个或多个task在同一个进程中,随机分.否则和shuffle grouping 行为一致.

    • 可靠性

    • tasks

    • workers

    • 一个topology有多个worker(进程)

    • 每个worker是一个物理JVM
    • 并行度300的topology 50个进程的话.每个进程处理6个tasks.均分.

4Topology并行度

一台机器为多个topology运行多个进程.
一个进程属于一个特定的topology
一个进程为topology启动多个exector.
每个exector会为**特定**spout/bolt 运行一个或多个任务.
默认每个exector执行一个任务.

设置每个spout/bolt启动几个executor.默认启动1个exector.
配置任务数,每个bolt/spout执行多少个任务.

  • 动态增加或减少exector数或进程数.不需要重启集群或者topology

5消息的可靠处理

确保spout发出的每个消息都被完整处理.
tuple tree超时值默认30s.

读取消息,消息设置为 “pending”状态.只有得到客户端的应答后,ack fail调用后才会从队列中真正删除.

锚定:指定的节点增加了一个新节点.

多重锚定 ???
P79-81

  • 高效实现tupletree

    1. acker跟踪DAG中每个消息,可以设置并行度.通过参数设置,大量消息时应提高并行度
    2. acker可以有多个.使用哈希算法,确定spout id 对于的acker.
    3. 20字节跟踪一棵树.

6一致性任务

保证tuple只被处理一次.
一致性事物组件

  • 简单设计1:强顺序流
  • 简单设计2”强顺序batch流
    使用CoordinateBolt

  • 7DRPC

  • 8Trident

以上是关于TiDB一个大数据实时计算的存储利器的主要内容,如果未能解决你的问题,请参考以下文章

.NET 大数据实时计算--学习笔记

Storm实战_构建大数据实时计算

Storm实战_构建大数据实时计算

赵强老师免费公开课第三季:大数据实时计算

Storm大数据实时计算

PiFlow发布全新一站式实时HTAP数据库TiDB数据处理组件