最近研究了数据库实时转移的方案,目的是要把数据库中某些表的指定数据实时的转移到别的数据库中。html
这与平时了解的数据库备份概念不一样,数据库备份是对全库数据进行复制,永许有必定的延时。而本次研究的是对数据过滤后实时的转移,延迟时间要控制到毫秒级。nginx
在调研的过程当中了解到Confluent平台能够很好的实现这个功能,因而开始逐步深刻探究其使用方法和工做原理。程序员
但在实践的过程当中发现国内用此平台的很少,这方面的资料很是之少,都是些只言片语的介绍,并无一个实践的教程。web
各类资料搜索下来,发现惟一的途径只能经过官网去学习,可是官网都是英文文档,对于英语很差的人学习起来更是吃力。sql
最后本人经过对官网文档的翻译,以及一些源码的阅读,最终成功搭建了一套实时数据转移系统,运行结果也比较稳定,知足了实际需求。数据库
在此我也把此次的学习、实践成果分享出来,供须要的人参考,避免后来人走一些弯路。apache
Confluent 官网资料不少,本章主要对一些必要的概念或者是和本实验有关的东西进行重点讲解。安全
提及Kafka相信你们不少人都知道,知道是一个高吞吐量的分布式发布订阅消息系统,国内不少公司也在用,但对于Confluent你们可能相对了解的较少。app
Confluent是一家创业公司,由当时编写Kafka的几位程序员从Linked In公司离职后创立的,Confluent Platform 就是Confluent公司的主要产品,其平台实现主要依赖的就是Kafka。负载均衡
如下是截取的两段官方文字介绍:
The Confluent Platform is a streaming platform that enables you to organize and manage data from many different sources with one reliable, high performance system. docs.confluent.io/current/get…
Confluent Platform makes it easy build real-time data pipelines and streaming applications. By integrating data from multiple sources and locations into a single, central Event Streaming Platform for your company. docs.confluent.io/current/pla…
上面两段话翻译过了就是:
Confluent是用来管理和组织不一样数据源的流媒体平台,能够实时地把不一样源和位置的数据集成到一个中心的事件流平台。并且还强调了这个平台很可靠、性能很高,总之就是很好用,很强大。
下面的图形象说明了Confluent能够实现的功能。
Confluent目前提供了社区版和商业版两个版本,社区版永久免费,商业版面向企业收费。
社区版提供了Connectors、REST Proxy、KSQL、Schema-Registry等基础服务。
商业版为企业提供了控制面板、负载均衡,跨中心数据备份、安全防御等高级特性。
经过对两个版本功能的比对,发现社区版已经能知足咱们的要求,所以本文后面都以社区版来进行研究。
下载连接:www.confluent.io/download/
解压下载的社区版本包,包含如下文件夹:
Confluent提供了多种命令来对confluent平台进行管理监控,命令列表及描述以下:
这里主要提一下咱们最可能最经常使用到confluent start ,confluent stop 两个命令,这两个命令分别用来启动和中止相应的服务以及依赖的全部服务项。
start命令若是不带参数会把相关服务按顺序启动,stop会逆序把各服务中止。
执行start命令:
confluent start
复制代码
结果以下,[UP]表示该服务启动成功:
Startingzookeeper
zookeeper is[UP]
Startingkafka
kafka is[UP]
Startingschema-registry
schema-registry is[UP]
Startingkafka-rest
kafka-rest is[UP]
Startingconnect
connect is[UP]
Startingksql-server
ksql-server is[UP]
复制代码
执行stop命令:
confluent stop
复制代码
结果以下,[DOWN]表示该服务中止成功:
Stoppingksql-server
ksql-server is [DOWN]
Stopping connect
connect is [DOWN]
Stopping kafka-rest
kafka-rest is [DOWN]
Stopping schema-registry
schema-registry is [DOWN]
Stopping kafka
kafka is [DOWN]
Stopping zookeeper
zookeeper is [DOWN]
复制代码
从上面命令能够看到服务的启动关闭都有必定的顺序性,不能随意颠倒。
Zookeeper是一个开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop、Hbase、Storm的重要组件。
Zookeeper主要功能包含:维护配置信息、命名、提供分布式同步、组管理等集中式服务 。
Kafka uses ZooKeeper to store persistent cluster metadata and is a critical component of the Confluent Platform deployment. docs.confluent.io/current/zoo…
Kafka使用ZooKeeper对集群元数据进行持久化存储,是Confluent平台部署的关键组件。
若是ZooKeeper丢失了Kafka数据,集群的副本映射关系以及topic等配置信息都会丢失,最终致使Kafka集群再也不正常工做,形成数据丢失的后果。
想要了解更多Zookeeper信息,能够查看官方连接:zookeeper.apache.org/
Kafka是一个分布式流处理平台,最初由Linkedin公司开发,是一个基于zookeeper协调并支持分区和多副本的分布式消息系统。
Kafka最大的特性就是能够实时的处理大量数据以知足各类需求场景:好比基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎、web/nginx日志、访问日志、消息服务等等。
Kafka用Java和Scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。
Apache Kafka® is a distributed streaming platform. Publish and subscribe to streams of records, similar to a message queue or enterprise messaging system. Store streams of records in a fault-tolerant durable way. Process streams of records as they occur. kafka.apache.org/intro
Kafka工做原理是一种高吞吐量的分布式发布订阅消息系统,消息队列中间件,主要功能是负责消息传输,Confluent就是依赖Kafka来进行消息传输。
The Confluent REST Proxy provides a RESTful interface to a Kafka cluster, making it easy to produce and consume messages, view the state of thecluster, and perform administrative actions without using the native Kafka protocol or clients. docs.confluent.io/current/kaf…
Confluent提供的Kafka RESTful接口服务组件。
能够经过Restful接口而不是本机Kafka协议或客户端的状况下,很容易的生成和使用消息,并且还能够查看集群状态以及执行管理操做。
Schema Registry provides a serving layer for your metadata. Itprovides a RESTful interface for storing and retrieving Avro schemas. It storesa versioned history of all schemas, provides multiple compatibility settingsand allows evolution of schemas according to the configured compatibilitysettings and expanded Avro support. docs.confluent.io/current/sch…
Schema-Registry是为元数据管理提供的服务,一样提供了RESTful接口用来存储和获取schemas,它可以保存数据格式变化的全部版本,并能够作到向下兼容。
Schema-Registry还为Kafka提供了Avro格式的序列化插件来传输消息。
Confluent主要用Schema-Registry来对数据schema进行管理和序列化操做。
Kafka Connect is a framework for connecting Kafka with external systems such as databases,key-value stores, search indexes, and file systems.Using Kafka Connect you canuse existing connector implementations for common data sources and sinks to move data into and out of Kafka. docs.confluent.io/current/con…
Kafka Connect是 Kafka的一个开源组件,是用来将Kafka与数据库、key-value存储系统、搜索系统、文件系统等外部系统链接起来的基础框架。
经过使用Kafka Connect框架以及现有的链接器能够实现从源数据读入消息到Kafka,再从Kafka读出消息到目的地的功能。
Confluent 在Kafka connect基础上实现了多种经常使用系统的connector免费让你们使用,提供的列表以下:
这些connector均可以拿来无偿使用,并且Confluent 在GitHub上提供了源码,能够根据自身业务需求进行修改。
KSQL is thestreaming SQL engine for Apache Kafka that you can use to perform streamprocessing tasks using SQL statements. docs.confluent.io/current/str…
KSQL是使用SQL语句对Apache Kafka执行流处理任务的流式SQL引擎。
Confluent 使用KSQL对Kafka的数据提供查询服务.
以上主要对Confluent的起源,Confluent Platform的功能、组成以及相关服务进行了介绍。相信你们经过本文对Confluent有了初步的认识与了解,这也为后面的实践打下了基础。
由于Confluent Platform功能庞大,服务众多,刚开始用起来也可能比较迷惑。但好在官网各类文档比较详细,也有相应的博客供你们交流,若是有本文还未说明的地方,你们也能够到官网进一步查阅。
最后尽请期待接下来的实践篇,下篇将一步步介绍如何搭建出一套高性能的数据转移系统。
想要了解更多,关注公众号:七分熟pizza