为什么在clickhouse Kafka引擎中一个队列表的两个Kafka代理不能同时工作?

7rfyedvj  于 2023-01-25  发布在  Apache
关注(0)|答案(2)|浏览(150)

我有一个非常简单的设置来将数据从Kafka插入到Clickhouse表中。我的数据流如下所示:

create table vflow.queue_ng
(
    message String
)
    engine = Kafka SETTINGS
        kafka_broker_list = '100.127.201.11:9092,100.127.203.13:9092',
        kafka_topic_list = 'netflow',
        kafka_group_name = 'catflow_ng',
        kafka_format = 'JSONAsString';

但是这个表只从一个代理!第一个或第二个代理获取数据流,但不能同时从两个代理获取。
对于每个代理(如果它被用作唯一的代理),它都工作得很好。
我试着用一个代理来使用队列表,如下所示:

create table vflow.queue_ng
(
    message String
)
    engine = Kafka SETTINGS
        kafka_broker_list = '100.127.203.13:9092',
        kafka_topic_list = 'netflow',
        kafka_group_name = 'catflow_ng',
        kafka_format = 'JSONAsString';

但是如果我添加第二个brocker并使用Kafka_broker_list = '100.127.201.11:9092,100.127.203.13:9092'重新创建表,那么它只能从一个源获取数据。

klsxnrf1

klsxnrf11#

该主题有多少个分区?
分区分布在代理之间。如果您有一个分区,则只能从一个代理读取它。
如果您有多个分区,那么问题可能是,如果消息密钥不是最佳的,则所有消息都被写入一个分区。
第三件事是主题的复制因素。

vq8itlhq

vq8itlhq2#

Kafka的这两个示例是分开的、独立的,没有集群。
然后Clickhouse将引导到代理地址列表中的第一个可用“集群”。
类似地,生产者进程只向这些服务器单独发送数据。
如果要连接不同Kafka聚类(甚至是一个示例的聚类)中的数据,则需要两个不同的表定义,然后在查询中连接/联合数据

相关问题