Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lijianghuflute
canal
提交
fecc1121
canal
项目概览
lijianghuflute
/
canal
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
canal
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
fecc1121
编写于
11月 14, 2018
作者:
R
rewerma
提交者:
GitHub
11月 14, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #21 from alibaba/master
merge
上级
8c3ade2d
dd045779
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
65 addition
and
33 deletion
+65
-33
client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/ExtensionLoader.java
...a/otter/canal/client/adapter/support/ExtensionLoader.java
+7
-4
deployer/src/main/java/com/alibaba/otter/canal/deployer/CanalConstants.java
...java/com/alibaba/otter/canal/deployer/CanalConstants.java
+2
-0
deployer/src/main/java/com/alibaba/otter/canal/deployer/CanalLauncher.java
.../java/com/alibaba/otter/canal/deployer/CanalLauncher.java
+2
-0
instance/manager/src/main/java/com/alibaba/otter/canal/instance/manager/CanalInstanceWithManager.java
...tter/canal/instance/manager/CanalInstanceWithManager.java
+1
-1
parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/LocalBinlogEventParser.java
...ter/canal/parse/inbound/mysql/LocalBinlogEventParser.java
+1
-0
parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlEventParser.java
...aba/otter/canal/parse/inbound/mysql/MysqlEventParser.java
+1
-0
parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/DatabaseTableMeta.java
...ter/canal/parse/inbound/mysql/tsdb/DatabaseTableMeta.java
+30
-26
parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/TableMetaTSDBBuilder.java
.../canal/parse/inbound/mysql/tsdb/TableMetaTSDBBuilder.java
+0
-1
server/src/main/java/com/alibaba/otter/canal/common/MQProperties.java
...ain/java/com/alibaba/otter/canal/common/MQProperties.java
+19
-0
server/src/main/java/com/alibaba/otter/canal/kafka/CanalKafkaProducer.java
...ava/com/alibaba/otter/canal/kafka/CanalKafkaProducer.java
+2
-1
未找到文件。
client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/ExtensionLoader.java
浏览文件 @
fecc1121
...
...
@@ -2,13 +2,15 @@ package com.alibaba.otter.canal.client.adapter.support;
import
java.io.BufferedReader
;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.InputStreamReader
;
import
java.net.MalformedURLException
;
import
java.net.URL
;
import
java.net.URLClassLoader
;
import
java.nio.file.Paths
;
import
java.util.*
;
import
java.util.Arrays
;
import
java.util.Enumeration
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.concurrent.ConcurrentMap
;
import
java.util.regex.Pattern
;
...
...
@@ -178,8 +180,9 @@ public class ExtensionLoader<T> {
@SuppressWarnings
(
"unchecked"
)
private
T
createExtension
(
String
name
,
String
key
)
{
System
.
out
.
println
(
"xxxxxxxxxxxxx"
);
getExtensionClasses
().
forEach
((
k
,
v
)
->
logger
.
info
(
"fffff: "
+
k
+
" "
+
v
.
getName
()));
// System.out.println("xxxxxxxxxxxxx");
// getExtensionClasses().forEach((k, v) -> logger.info("fffff: " + k +
// " " + v.getName()));
Class
<?>
clazz
=
getExtensionClasses
().
get
(
name
);
if
(
clazz
==
null
)
{
throw
new
IllegalStateException
(
"Extension instance(name: "
+
name
+
", class: "
+
type
...
...
deployer/src/main/java/com/alibaba/otter/canal/deployer/CanalConstants.java
浏览文件 @
fecc1121
...
...
@@ -45,6 +45,8 @@ public class CanalConstants {
public
static
final
String
CANAL_MQ_CANALBATCHSIZE
=
ROOT
+
"."
+
"mq.canalBatchSize"
;
public
static
final
String
CANAL_MQ_CANALGETTIMEOUT
=
ROOT
+
"."
+
"mq.canalGetTimeout"
;
public
static
final
String
CANAL_MQ_FLATMESSAGE
=
ROOT
+
"."
+
"mq.flatMessage"
;
public
static
final
String
CANAL_MQ_COMPRESSION_TYPE
=
ROOT
+
"."
+
"mq.compressionType"
;
public
static
final
String
CANAL_MQ_ACKS
=
ROOT
+
"."
+
"mq.acks"
;
public
static
String
getInstanceModeKey
(
String
destination
)
{
return
MessageFormat
.
format
(
INSTANCE_MODE_TEMPLATE
,
destination
);
...
...
deployer/src/main/java/com/alibaba/otter/canal/deployer/CanalLauncher.java
浏览文件 @
fecc1121
...
...
@@ -100,6 +100,8 @@ public class CanalLauncher {
CanalConstants
.
CANAL_MQ_CANALGETTIMEOUT
)));
mqProperties
.
setFlatMessage
(
Boolean
.
valueOf
(
CanalController
.
getProperty
(
properties
,
CanalConstants
.
CANAL_MQ_FLATMESSAGE
)));
mqProperties
.
setCompressionType
(
CanalController
.
getProperty
(
properties
,
CanalConstants
.
CANAL_MQ_COMPRESSION_TYPE
));
mqProperties
.
setAcks
(
CanalController
.
getProperty
(
properties
,
CanalConstants
.
CANAL_MQ_ACKS
));
return
mqProperties
;
}
...
...
instance/manager/src/main/java/com/alibaba/otter/canal/instance/manager/CanalInstanceWithManager.java
浏览文件 @
fecc1121
...
...
@@ -304,7 +304,6 @@ public class CanalInstanceWithManager extends AbstractCanalInstance {
}
boolean
tsdbEnable
=
BooleanUtils
.
toBoolean
(
parameters
.
getTsdbEnable
());
if
(
tsdbEnable
)
{
mysqlEventParser
.
setEnableTsdb
(
tsdbEnable
);
mysqlEventParser
.
setTableMetaTSDBFactory
(
new
DefaultTableMetaTSDBFactory
()
{
@Override
...
...
@@ -327,6 +326,7 @@ public class CanalInstanceWithManager extends AbstractCanalInstance {
}
}
});
mysqlEventParser
.
setEnableTsdb
(
tsdbEnable
);
}
eventParser
=
mysqlEventParser
;
}
else
if
(
type
.
isLocalBinlog
())
{
...
...
parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/LocalBinlogEventParser.java
浏览文件 @
fecc1121
...
...
@@ -57,6 +57,7 @@ public class LocalBinlogEventParser extends AbstractMysqlEventParser implements
((
DatabaseTableMeta
)
tableMetaTSDB
).
setBlackFilter
(
eventBlackFilter
);
((
DatabaseTableMeta
)
tableMetaTSDB
).
setSnapshotInterval
(
tsdbSnapshotInterval
);
((
DatabaseTableMeta
)
tableMetaTSDB
).
setSnapshotExpire
(
tsdbSnapshotExpire
);
((
DatabaseTableMeta
)
tableMetaTSDB
).
init
(
destination
);
}
tableMetaCache
=
new
TableMetaCache
(
metaConnection
,
tableMetaTSDB
);
...
...
parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlEventParser.java
浏览文件 @
fecc1121
...
...
@@ -124,6 +124,7 @@ public class MysqlEventParser extends AbstractMysqlEventParser implements CanalE
((
DatabaseTableMeta
)
tableMetaTSDB
).
setBlackFilter
(
eventBlackFilter
);
((
DatabaseTableMeta
)
tableMetaTSDB
).
setSnapshotInterval
(
tsdbSnapshotInterval
);
((
DatabaseTableMeta
)
tableMetaTSDB
).
setSnapshotExpire
(
tsdbSnapshotExpire
);
((
DatabaseTableMeta
)
tableMetaTSDB
).
init
(
destination
);
}
tableMetaCache
=
new
TableMetaCache
(
metaConnection
,
tableMetaTSDB
);
...
...
parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/DatabaseTableMeta.java
浏览文件 @
fecc1121
...
...
@@ -10,6 +10,7 @@ import java.util.concurrent.ScheduledExecutorService;
import
java.util.concurrent.ScheduledFuture
;
import
java.util.concurrent.ThreadFactory
;
import
java.util.concurrent.TimeUnit
;
import
java.util.concurrent.atomic.AtomicBoolean
;
import
java.util.concurrent.locks.ReadWriteLock
;
import
java.util.concurrent.locks.ReentrantReadWriteLock
;
import
java.util.regex.Pattern
;
...
...
@@ -62,9 +63,10 @@ public class DatabaseTableMeta implements TableMetaTSDB {
}
});
private
ReadWriteLock
lock
=
new
ReentrantReadWriteLock
();
private
AtomicBoolean
initialized
=
new
AtomicBoolean
(
false
);
private
String
destination
;
private
MemoryTableMeta
memoryTableMeta
;
private
MysqlConnection
connection
;
// 查询meta信息的链接
private
volatile
MysqlConnection
connection
;
// 查询meta信息的链接
private
CanalEventFilter
filter
;
private
CanalEventFilter
blackFilter
;
private
EntryPosition
lastPosition
;
...
...
@@ -74,40 +76,42 @@ public class DatabaseTableMeta implements TableMetaTSDB {
private
int
snapshotInterval
=
24
;
private
int
snapshotExpire
=
360
;
private
ScheduledFuture
<?>
scheduleSnapshotFuture
;
public
DatabaseTableMeta
(){
}
@Override
public
boolean
init
(
final
String
destination
)
{
this
.
destination
=
destination
;
this
.
memoryTableMeta
=
new
MemoryTableMeta
();
// 24小时生成一份snapshot
if
(
snapshotInterval
>
0
)
{
scheduleSnapshotFuture
=
scheduler
.
scheduleWithFixedDelay
(
new
Runnable
()
{
@Override
public
void
run
()
{
boolean
applyResult
=
false
;
try
{
MDC
.
put
(
"destination"
,
destination
);
applyResult
=
applySnapshotToDB
(
lastPosition
,
false
);
}
catch
(
Throwable
e
)
{
logger
.
error
(
"scheudle applySnapshotToDB faield"
,
e
);
}
if
(
initialized
.
compareAndSet
(
false
,
true
))
{
this
.
destination
=
destination
;
this
.
memoryTableMeta
=
new
MemoryTableMeta
();
// 24小时生成一份snapshot
if
(
snapshotInterval
>
0
)
{
scheduleSnapshotFuture
=
scheduler
.
scheduleWithFixedDelay
(
new
Runnable
()
{
@Override
public
void
run
()
{
boolean
applyResult
=
false
;
try
{
MDC
.
put
(
"destination"
,
destination
);
applyResult
=
applySnapshotToDB
(
lastPosition
,
false
);
}
catch
(
Throwable
e
)
{
logger
.
error
(
"scheudle applySnapshotToDB faield"
,
e
);
}
try
{
MDC
.
put
(
"destination"
,
destination
);
if
(
applyResult
)
{
snapshotExpire
((
int
)
TimeUnit
.
HOURS
.
toSeconds
(
snapshotExpire
));
try
{
MDC
.
put
(
"destination"
,
destination
);
if
(
applyResult
)
{
snapshotExpire
((
int
)
TimeUnit
.
HOURS
.
toSeconds
(
snapshotExpire
));
}
}
catch
(
Throwable
e
)
{
logger
.
error
(
"scheudle snapshotExpire faield"
,
e
);
}
}
catch
(
Throwable
e
)
{
logger
.
error
(
"scheudle snapshotExpire faield"
,
e
);
}
}
}
,
snapshotInterval
,
snapshotInterval
,
TimeUnit
.
HOURS
);
}
,
snapshotInterval
,
snapshotInterval
,
TimeUnit
.
HOURS
);
}
}
return
true
;
}
...
...
parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/tsdb/TableMetaTSDBBuilder.java
浏览文件 @
fecc1121
...
...
@@ -36,7 +36,6 @@ public class TableMetaTSDBBuilder {
}
}
TableMetaTSDB
tableMetaTSDB
=
(
TableMetaTSDB
)
applicationContext
.
getBean
(
"tableMetaTSDB"
);
tableMetaTSDB
.
init
(
destination
);
logger
.
info
(
"{} init TableMetaTSDB with {}"
,
destination
,
springXml
);
return
tableMetaTSDB
;
}
else
{
...
...
server/src/main/java/com/alibaba/otter/canal/common/MQProperties.java
浏览文件 @
fecc1121
...
...
@@ -20,6 +20,8 @@ public class MQProperties {
private
int
canalBatchSize
=
50
;
private
Long
canalGetTimeout
=
100L
;
private
boolean
flatMessage
=
true
;
private
String
compressionType
=
"none"
;
private
String
acks
=
"all"
;
public
static
class
CanalDestination
{
...
...
@@ -149,4 +151,21 @@ public class MQProperties {
public
void
setProducerGroup
(
String
producerGroup
)
{
this
.
producerGroup
=
producerGroup
;
}
public
String
getCompressionType
()
{
return
compressionType
;
}
public
void
setCompressionType
(
String
compressionType
)
{
this
.
compressionType
=
compressionType
;
}
public
String
getAcks
()
{
return
acks
;
}
public
void
setAcks
(
String
acks
)
{
this
.
acks
=
acks
;
}
}
server/src/main/java/com/alibaba/otter/canal/kafka/CanalKafkaProducer.java
浏览文件 @
fecc1121
...
...
@@ -37,7 +37,8 @@ public class CanalKafkaProducer implements CanalMQProducer {
this
.
kafkaProperties
=
kafkaProperties
;
Properties
properties
=
new
Properties
();
properties
.
put
(
"bootstrap.servers"
,
kafkaProperties
.
getServers
());
properties
.
put
(
"acks"
,
"all"
);
properties
.
put
(
"acks"
,
kafkaProperties
.
getAcks
());
properties
.
put
(
"compression.type"
,
kafkaProperties
.
getCompressionType
());
properties
.
put
(
"retries"
,
kafkaProperties
.
getRetries
());
properties
.
put
(
"batch.size"
,
kafkaProperties
.
getBatchSize
());
properties
.
put
(
"linger.ms"
,
kafkaProperties
.
getLingerMs
());
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录