Welcome to IT 生活 互动学习空间,IT 记录 、分享、学习、提高
Jun 1
-- begin
之前在配置mssql 采集的时候,还专门去研究CDC的原理,怎么不知道有一个debezium这个好用的开源工具呢?
What is Debezium?
from:https://debezium.io/docs/tutorial/
Debezium is a distributed platform that turns your existing databases into event streams, so applications can see and respond immediately to each row-level change in the databases. Debezium is built on top of Apache Kafka and provides Kafka Connect compatible connectors that monitor specific database management systems. Debezium records the history of data changes in Kafka logs, from where your application consumes them. This makes it possible for your application to easily consume all of the events correctly and completely. Even if your application stops (or crashes), upon restart it will start consuming the events where it left off so it misses nothing.
Debezium是一个开源项目,为捕获数据更改(Capture Data Change,CDC)提供了一个低延迟的流式处理平台,通过安装配置Debezium监控数据库,可以实时消费行级别(row-level)的更改。身为一个分布式系统,Debezium也拥有良好的容错性。
Debezium的源端(即支持监控哪些数据库) : MySQL,MongoDB,PostgreSQL,Oracle,SQL Server
Debezium的目标端(即可以数据导入端) : Kafka
Debezium的应用 : 实时同步数据,实时消费数据
from:https://blog.csdn.net/bingoxubin/article/details/87871272
官网https://debezium.io/docs/tutorial/


Tags:
Jun 1
对debezium的运维和使用大半年时间。曾经管理的单个debezium集群有10个左右的debeizum任务。某个库的debezium订阅的表数量大概有几十个,得出了很多经验,踩了很多坑。下面会列出各种遇到的问题和一些比较不错的实践。

踩坑
debezium坑很多!!最大的坑就是kafka connect的rebalance;每当有新的debezium connector被发到集群后,就会触发集群的rebalance;集群内部的connector任务开始重启,表面上看任务重新分配,每个debezium实例都能均匀的分配到任务,确实很优雅。但是事实上重启集群内部所有的connector一个很重的操作。由于本身debezium的一些不优雅的特性,导致重启有可能造成集群内多个connector挂掉。所以需要尽可能的少触发集群的rebalance; 不过这个巨坑其实很难避免。

其它的几个大坑:

debezium的history topic 不能被多个connector共用。如果新的connector使用了集群内某个connector正在使用的history topic,集群内的正在使用history topic的connector会抛出异常终止(这个在0.5.x版本的时候,并不会抛出异常!!)。
竟可能的每个库对应一个connector,每个connector只订阅需要接入debezium的某个库内的表。可以通过设置库的白名单和表的白名单实现。(一个任务订阅多个库、多个表是非常不正确的行为,后续新增表代价会非常大)
debezium connector重启并不是每次都成功的,也即是说connector重启可能会导致任务挂掉。history topic可能会非常的大,connector重启时会读取history topic所有数据,如果history topic数据量非常的大,connector可能就无法在给定的时间内启动,connector抛出异常启动失败。
坑3这个坑遇上rebalance,就会出现比较严重的问题。如果集群内有多个connector,并且多个connector的histroy topic都很大,那rebalance之后,这些connector很有可能都会重启失败。
坑1和rebalance也有关系。debezium集群内connector数量很多时,重启可能会发生history topic被共用的异常,但是事实上我们并没有共用!!
建议
一个debezium内尽量不要运行太多的connector。相同数量的机器情况下,多集群的效果会比单集群多服务器好很多!
把很重的connector迁到单独的集群。比如我所在的公司,需要订阅一个库内几十个表,这就导致任务的重启非常的慢,停掉任务就要花很长时间,如果和其它connector部署在一起,不是很好!(理由自己想)
推荐将debezium部署到k8s,集群扩容、缩容会很方便。
可以尝试将每个connector对应一个k8s pod,来做到正真的资源隔离,互不影响。当然这个我没有尝试过 ~.~ 。
大概就这些吧。
--------------------- 
作者:_laomei_ 
来源:CSDN 
原文:https://blog.csdn.net/sweatOtt/article/details/82430724 
版权声明:本文为博主原创文章,转载请附上博文链接!

---end
Tags:
May 10
-- begin how-linux-get-dir-laster-file-name
linux获取文件夹下最新的文件名
ls -lt /dirname/ | grep filename | head -n 1 |awk '{print $9}'

逐条解释:

ls -lt /dirname/
 列出此目录下的所有文件并按照时间先后排序

grep filename
 过滤出包含关键字的文件

head -n 1
 查看排名第一的文件

awk '{print $9}'
打印出第九字段

其他命令
shell从字符串中提取数字
echo "2019年05月21日" | tr -cd "[0-9]"
这样就可以提取出20190521

按时间反序排序当前文件夹中文件(-r反序)
在当前文件夹内查找最近一天内更改的文件(包括子文件夹):
find . -type f -mtime -1
1天以前更改的文件:
find . -type f -mtime +1
最近10分钟内状态变化的文件:
find . -type f -cmin -10

查找所有文件的名称
ll -rth|grep -v "total"|awk -F ' ' {'print $NF'} 
-- end how-linux-get-dir-laster-file-name
Tags:
May 10
---begin linux中awk提出字符串中的数字、小写字母、大写字母等
awk提出字符串中的数字、小写字母、大写字母等
若是需要提取一个字符串中想要的数据,可以思考下awk
1、提取字符串中出现的阿拉伯数字
echo "ABC123abc"| awk 'BEGIN{FS=""}{for(i=1;i<=NF;i++){if($i ~ /[[:digit:]]/){str=$i;str1=(str1 str)}}print str1}'

2、提取字符串中的小写字母
echo "ABC123abc"| awk 'BEGIN{FS=""}{for(i=1;i<=NF;i++){if($i ~ /[[:lower:]]/){str=$i;str1=(str1 str)}}print str1}'

3、提取字符串中的大写字母
echo "123abcABC"| awk 'BEGIN{FS=""}{for(i=1;i<=NF;i++){if($i ~ /[[:upper:]]/){str=$i;str1=(str1 str)}}print str1}'

4、提取字符串中非阿拉伯数字
echo "123abcABC"| awk 'BEGIN{FS=""}{for(i=1;i<=NF;i++){if($i ~ /[^0-9]/){str=$i;str1=(str1 str)}}print str1}'

5、提取字符串终中的字母,不分大小写
 echo "123abcABC"| awk 'BEGIN{FS=""}{for(i=1;i<=NF;i++){if($i ~ /[[:alpha:]]/){str=$i;str1=(str1 str)}}print str1}'
---end
Tags: ,
Apr 11
---begin
kafka快速入门--中文伪官网
kafka官网地址:
中文版本

kafka-console-producer.sh
kafka-console-producer.sh
bin/kafka-console-producer.sh --broker-list localhost:9092  --topic test
--broker-list localhost:9092 --topic test

bin/kafka-topics.sh  --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
Linux版本 快捷版本步骤
Step 1: 下载代码
下载 1.0.0版本并解压缩。.
> tar -xzf kafka_2.11-1.0.0.tgz
> cd kafka_2.11-1.0.0
Step 2.1: 启动服务器--zookeeper
Kafka 使用 ZooKeeper 如果你还没有ZooKeeper服务器,你需要先启动一个ZooKeeper服务器。 您可以通过与kafka打包在一起的便捷脚本来快速简单地创建一个单节点ZooKeeper实例。
> bin/zookeeper-server-start.sh config/zookeeper.properties

Step 2.2
现在启动Kafka服务器
> bin/kafka-server-start.sh config/server.properties

Step 3: 创建一个 topic
让我们创建一个名为“test”的topic,它有一个分区和一个副本:
> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
现在我们可以运行list(列表)命令来查看这个topic:
> bin/kafka-topics.sh --list --zookeeper localhost:2181
输出结果 test
或者,您也可将代理配置为:在发布的topic不存在时,自动创建topic,而不是手动创建。

Step 4: 发送一些消息
Kafka自带一个命令行客户端,它从文件或标准输入中获取输入,并将其作为message(消息)发送到Kafka集群。默认情况下,每行将作为单独的message发送。

运行 producer,然后在控制台输入一些消息以发送到服务器。
> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
>输入值this is a message

Step 5: 启动一个 consumer
Kafka 还有一个命令行consumer(消费者),将消息转储到标准输出。
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

Step 6: 设置多代理集群(更多高级用法)
到目前为止,我们一直在使用单个代理,这并不好玩。对 Kafka来说,单个代理只是一个大小为一的集群,除了启动更多的代理实例外,没有什么变化。 为了深入了解它,让我们把集群扩展到三个节点(仍然在本地机器上)。
首先,为每个代理创建一个配置文件 (在Windows上使用copy 命令来代替):

> cp config/server.properties config/server-1.properties
> cp config/server.properties config/server-2.properties
现在编辑这些新文件并设置如下属性:
config/server-1.properties:
    broker.id=1
    listeners=PLAINTEXT://:9093
    log.dir=/tmp/kafka-logs-1
 
config/server-2.properties:
    broker.id=2
    listeners=PLAINTEXT://:9094
    log.dir=/tmp/kafka-logs-2
broker.id属性是集群中每个节点的名称,这一名称是唯一且永久的。我们必须重写端口和日志目录,因为我们在同一台机器上运行这些,我们不希望所有的代理尝试在同一个端口注册,或者覆盖彼此的数据。

我们已经建立Zookeeper和一个单节点了,现在我们只需要启动两个新的节点:
> bin/kafka-server-start.sh config/server-1.properties &
...
> bin/kafka-server-start.sh config/server-2.properties &

Step 7: 使用Kafka Connect来导入/导出数据
略--具体看页面顶部网站
Step 8:使用 Kafka Streams 来处理数据
略--具体看页面顶部网站
Kafka Streams是用于构建实时关键应用程序和微服务的客户端库,输入与输出数据存储在Kafka集群中。 Kafka Streams把客户端能够轻便地编写部署标准Java和Scala应用程序的优势与Kafka服务器端集群技术相结合,使这些应用程序具有高度伸缩性、弹性、容错性、分布式等特性.
kafka-quick-begin
---end
Tags:
分页: 1/290 第一页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]