使用Kafka在两个微服务之间同步数据

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

我正在尝试使用kakfa来同步两个微服务A和B的数据。

A在数据库表中暂存公司中一组雇员的一些数据。然后,最终用户将触发从UI到A的后端服务的事件,在该事件中,它将kakfa消息发送到预订的主题[[B。

B

然后从消息或暂存表中获取数据,对其进行验证并保存到其自己的数据库表中。我有问题..

  1. 每个公司的员工人数范围从10到1000s,并且可能会有多家公司在一年中的特定时间尝试同步数据。因此性能是一个问题。分配负载的好方法是什么?含义..我应该将消息设计为员工级别吗?这意味着可能会有成千上万条消息,尽管从设计角度来看这是最简单的。还是应该在公司层面?或公司内的一组雇员?微服务没有做太多的处理并将其持久化到表上。它能够处理负载吗?限制因素是什么?
  2. 我们正在处理的数据是存储在数据库中的JSON。拥有一个临时表并使用消息中的某种主键从

    B

查找会更好吗?还是让消息中的所有数据都可以? JSON对于每个员工数据来说并不是那么大,但是如果将其汇总到一组员工中,比如说100s,则可能是10-100 KB。通过从表中查找数据,我们能买到很多东西吗?
  • 我们需要能够跟踪状态/错误,以便最终用户知道任何问题并执行纠正数据和/或尝试重新同步的操作。我想到的某种方法是创建一个表,将其命名为

    BATCH_JOB

  • BATCH_TASK表,以跟踪作业级别的请求(如上所述,一组员工的UI事件触发了重新同步过程),并且任务(员工级别)。还是会有更清洁的方法?任何帮助/设计技巧都将不胜感激。
    java performance apache-kafka relational-database data-synchronization
    1个回答
    0
    投票
    分割负载的好方法是什么?

    简短的答案是使用具有大量分区的自定义分区方案。说100。

    或者您可以为每个公司创建一个主题,这取决于您是否对每个主题使用不同的记录模式

    我们从查询表中的数据中购买了很多东西吗?

    好吧,您无法像查询表那样轻松地查询主题,所以这是有好处的。您还可以使用KTable和交互式查询

    我们正在处理的数据是存储在数据库中的JSON

    我假设您不只是将一个BLOB列放入数据库中(并且您还没有弄清正在使用哪个数据库)。

    个人,我建议您使用Avro和Kafka Connect将主题存储到数据库中。这是在Kafka API中针对此类任务的推荐解决方案,而无需引入Spark等其他项目或编写您自己的数据库代码]

    我们需要能够跟踪状态/错误,以便最终用户知道任何问题并采取纠正数据的措施

    表可以工作,但是如果您可以将记录写到表中,还可以将事件写到另一个Kafka主题并从中获取“通知”

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