Memgraph Stream 无法解决冲突的事务

问题描述 投票:0回答:1

我正在使用本地托管的 Memgraph 实例,并通过 Kafka Connect 和 Kafka 从 postgres 流式传输 CDC 数据。我最近遇到了交易错误,目前还没有找到有效的解决方案。

我收到的错误是:

Error happened in consumer XX while processing a batch: Cannot resolve conflicting transactions. You can retry this transaction when the conflicting transaction is finished!

这是我的撰写对象:

memgraph:
    image: memgraph/memgraph-mage:1.16-memgraph-2.16
    container_name: memgraph-mage
    restart: always
    depends_on:
      kafka:
        condition: service_healthy
    environment:
      - vm.max_map_count=262144
    ports:
      - "7687:7687"
      - "7444:7444"
    command: ["--log-level=INFO", "--also-log-to-stderr=true", "--telemetry-enabled=false", "--stream-transaction-conflict-retries=10", "--stream-transaction-retry-interval=500"]
    volumes:
      - mg-data:/var/lib/memgraph
      - mg-log:/var/log/memgraph
      - mg-etc:/etc/memgraph
      - mg-usr:/usr/lib/memgraph
    networks:
      - internal_net

我有两个流同时运行,它们可能会产生干扰,即同时向同一节点添加边。

目前,我必须每 2-3 分钟左右重新启动一次直播。我没有处理特别大量的数据,大约 500 个事件/分钟。我怀疑是因为某些节点同时更新,但我不知道如何调试和修复它。

如有任何帮助,我们将不胜感激。

谢谢。

apache-kafka apache-kafka-streams memgraphdb memgraph
1个回答
0
投票

如果您同时修改任何关系或节点,甚至向同一节点添加关系,您将得到冲突的事务,正如您已经正确注意到的那样。

如果事务中的一批消息修改了一个

super node
(有很多关系),其他批次(流)经常尝试更新相同的
super node
,你会得到很多冲突的事务。

这一切都源于 Memgraph 具有高 ACID 一致性:https://memgraph.com/docs/fundamentals/storage-memory-usage

这是一个预期错误,您可以解决。

应根据您的工作负载配置流配置标志:https://memgraph.com/docs/database-management/configuration#streams

我希望这个值比 10 更高:

--stream-transaction-conflict-retries=

多高?答案应该取决于您的批次正在修改多少内容以及数据的结构。更大的批次和变更会增加冲突的可能性。

批量越小,重试次数越多,超时越小。

如果您选择更大的批次,那么您可能应该进行更小的重试,但具有更大的超时时间。

如果 Memgraph 能够跟上正在发生的事件的步伐,您不应该过度担心重试。

我希望这个标志取决于实际的批次持续时间。

--stream-transaction-retry-interval=500

如果一批消息/事件大约需要 3-4 秒,那么每 500 毫秒重试一次是没有意义的。

© www.soinside.com 2019 - 2024. All rights reserved.