总结-开思-数据集成平台-V1.0

架构

设计阶段应注重异常流程的设计, 否则写出来的没有经过设计的异常处理代码会非常臃肿.

流处理程序中, 应保证元数据的一致性

即一个元数据应该只对应一个特定的数据体. 即使元数据里面的内容是相同的, 也不能随意的更换它

当系统较复杂时, 类型键的命名应该具体, 以避免歧义.

  • 正例: 数据业务类型: 商品 / 订单
  • 反例: 数据类型: 商品 / 订单

代码评审

审核代码时不应只注意代码的规范, 还应注意新旧代码的一致性

  • 比如命名和方法名的语义性

Elasticsearch

ES 限制最大的查询结果为 10000 条. 超过后即使分页查询第 10001 条也会报错

解决方案: 将限制由 10000 改为 1000000

1
2
3
4
PUT _all/_settings?preserve_existing=true
{
"index.max_result_window" : "10000000"
}

避免 Index 中的字段动态, 因为可能会导致整个 ES 服务超时

由于 ES 会为 Index 的每个新增的字段创建一个 mapping, 当 Index 中字段过多时, mappings 会非常多.
创建或删除 document 时由于会改变字段的 mapping, 会占用非常多的 CPU 时间. 从而导致整个 ES 服务超时.

每个 Index 尽量保证字段不变或很少变

消息组件

消息组件不是用来发送单条大 size 的数据的, 而是用来发送多条小 size 的数据的

Kafka

Kafka 中存在 transction 的概念. Producer 会收集一批数据后一次性发送

Flink