我们正在尝试将 Kafka KSQL 迁移到我们的系统,并希望分享一些我们在此过程中无法解决的问题。我们的集群中有 3 个 Kafka 节点,每个服务器都有:
8 CORE
50G+ RAM
100G ssd
在每台服务器上,我们都有 zookeeper 来管理集群。所有操作系统限制都增加了,因此节点可以使用比它需要的更多的资源:
Xmx: 10G
Xms: 10G
nofiles: 500000
目前,从生产者到集群的流量很小(每秒约 10 条消息)。现在我们只有一个生产者,消息格式是:
{"user_id": <id|INT>, "action_id": <id|INT>, "amount": <amount|FLOAT>}
Kafka 中的主题分为 6 个分区和 1 个复制:
Topic:<some_topic> PartitionCount:6 ReplicationFactor:1 Configs:
Topic: <some_topic> Partition: 0 Leader: 0 Replicas: 0 Isr: 0
Topic: <some_topic> Partition: 1 Leader: 1 Replicas: 1 Isr: 1
Topic: <some_topic> Partition: 2 Leader: 2 Replicas: 2 Isr: 2
Topic: <some_topic> Partition: 3 Leader: 0 Replicas: 0 Isr: 0
Topic: <some_topic> Partition: 4 Leader: 1 Replicas: 1 Isr: 1
Topic: <some_topic> Partition: 5 Leader: 2 Replicas: 2 Isr: 2
现在,当然,节点没有得到充分利用,在 kafka 方面一切都很好)
我们希望在 Kafka 之上使用 KSQL,以便能够使用 SQL 过滤进入我们系统的数据。以下是 KSQL 服务器资源:
32 CORE
100G+ RAM
50G+ ssd
我们只有一张桌子:
Field | Type
-------------------------------------
ROWTIME | BIGINT (system)
ROWKEY | VARCHAR(STRING) (system)
ACTION_ID | INTEGER
USER_ID | INTEGER
AMOUNT | DOUBLE
这是创建表的命令:
create table <some_table> (action_id INT, user_Id INT, amount DOUBLE) with (KAFKA_TOPIC='<some_topic>', VALUE_FORMAT='JSON', KEY = 'user_id');
在我们的应用程序中,我们需要通过 user_id 订阅表,如下所示:
SELECT * FROM <some_table> WHERE USER_ID=<some_user_id>;
对于生产 KSQL 服务器配置,我们使用来自 confluent 的官方推荐: https ://docs.confluent.io/current/ksql/docs/installation/server-config/config-reference.html#recommended-ksql-production-settings
KSQL 服务器的操作系统和软件限制也有所增加:
Xmx: 10G (we have tried till 50G)
Xms: 10G (we have tried till 50G)
nofiles: 500000
如果我们只使用一个订阅,我们不会遇到任何问题(在这种情况下一切都很好)。
但我们总共需要超过 200000 个订阅。因此,当我们尝试获得 100-200 个并行订阅时,我们的客户端会出现“读取超时”。在服务器中,我们没有看到任何可能影响 KSQL 的异常负载。
我们假设这个问题只与 KSQL 有关,因为当我们尝试使用另一个 KSQL 服务器(在不同的机器上)时,同时我们可以看到第二个服务器工作正常并且可以处理大约 1-20 个订阅。
我在与 KSQL 服务器连接的 Internet 上找不到任何基准,在文档中,我也找不到任何提及 KSQL 用例的内容,也许它的设计目的只是为少量连接提供大量数据,或者我们的系统配置错误,因此我们应该修复它以使用该软件实现我们的目标。
任何建议都会有所帮助。
提前致谢 )