【问题标题】:What is the best way to read from PgQ to Apache Kafka?从 PgQ 读取到 Apache Kafka 的最佳方式是什么?
【发布时间】:2020-03-20 21:27:09
【问题描述】:

我想从一个庞大的 PostgreSQL 数据库中的几个表中捕获数据更改。 最初我计划将logical decoding 功能与Debezium 一起使用。但是这个解决方案有很大的开销,因为它需要解码整个 WAL。另一种解决方案使用触发器和PgQ。 是否有任何通用方法可以将 PgQ 与 Kafka 或可能为此目的的 Kafka 连接器集成?

【问题讨论】:

    标签: postgresql apache-kafka apache-kafka-connect debezium logical-decoding


    【解决方案1】:

    您要么使用事务日志,要么基于查询。

    您使用哪个取决于您对数据的使用。基于查询的轮询数据库,基于日志的使用日志(WAL)。

    我对您声称 Debezium 具有“重大开销”的说法很感兴趣——您对此进行了量化吗?我知道有很多人在使用它,并且通常不会将其作为问题提出。

    对于基于查询的捕获,请使用 Kafka Connect JDBC 源连接器。

    您可以在此处查看每种方法的优缺点:http://rmoff.dev/ksny19-no-more-silos

    【讨论】:

    • 罗宾,非常感谢您的回答!我对开销的断言是关于数据库及其逻辑解码机制,而不是 Debezium 本身。例如,DB中有1k个表,但我只需要10个。在这种情况下,有必要从所有1k个表中解码WAL,因为WAL只是一个字节流,不解码就无法过滤。而且,据我了解,解码过程不是免费的(例如 CPU 成本),但有用的工作非常少(~10/1000 = 1%)。
    • 你说的有道理。我想如果你想要数据,在某些时候会有开销。你有触发器的开销,你有基于轮询的查询的开销,你有日志读取的开销。你必须选择一个最能接受的:)
    • 是的,我同意 :) 我认为,就效率而言,最好的方法是基于触发器的。在这种情况下,是否可以从 PgQ 编写自己的源连接器?还是使用生产者更简单?
    • 让我挑战你的触发器是最有效的 :) 主要问题是它们必须作为写入事务的一部分运行,即为你的在线查询增加延迟。相反,WAL 读取发生异步并且通常开销非常低。想象一下它就像另一个复制客户端,您会考虑启用复制任何重大开销吗?当然,它可能会增加一些 CPU 周期,但它是异步的,不会影响您的事务。使用 wal2json 和 pgoutput,您还可以直接在数据库端应用表过滤器,因此只有相关的更改才会流式传输到 Kafka Connect。
    猜你喜欢
    • 1970-01-01
    • 2018-02-08
    • 2018-06-12
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    相关资源
    最近更新 更多