我目前对所有这些工具都是陌生的,请您耐心地与我联系。
我正在尝试创建一个数据管道,以将MySQL数据库的更改推送到Kafka Broker。我正在尝试遵循教程here。如果所有docker容器(直接从debezium仓库下载)都位于本地计算机内,则可以使系统运行。
但是,如果我将MySQL,Kafka和Zookeeper码头工人放置在本地网络上的另一台计算机上并尝试连接它,则会出现以下错误:
private void ConfigurePolicies(IServiceCollection services)
{
//get data by your way, here is only an example.
var policies = new DefaultContext().AspNetPolicy
.Include(x => x.AspNetPolicyRequirement)
.Where(x => x.Enabled)
.ToList();
//map them to real policies
services.AddAuthorization(options =>
{
policies.ForEach(aspNetPolicy =>
{
options.AddPolicy(aspNetPolicy.Name, policy =>
{
foreach (var aspNetPolicyRequirement in aspNetPolicy.AspNetPolicyRequirement.Where(x=>x.Enabled))
{
switch (aspNetPolicyRequirement.RequirementType)
{
case RequirementType.Claim:
{
policy.RequireClaim(aspNetPolicyRequirement.RequirementName);
break;
}
case RequirementType.UserName:
{
policy.RequireUserName(aspNetPolicyRequirement.RequirementName);
break;
}
case RequirementType.Role:
{
policy.RequireRole(aspNetPolicyRequirement.RequirementName);
break;
}
case RequirementType.AuthenticatedUser:
{
policy.RequireAuthenticatedUser();
break;
}
case RequirementType.Assertion:
{
//policy.RequireAssertion(...);//To Do
break;
}
}
}
});
});
});
}
以下是我用来实现此目的的命令:
docker: Error response from daemon: could not get container for zookeeper: No such container: zookeeper.
两台机器可以在所有涉及的端口上相互通信(Zookeeper为2181,Kafka为9092,MySQL为3306)。
我还尝试提供属性名称
sudo docker run -it --rm --name connect \
-p 8083:8083 \
-e GROUP_ID=1 \
-e CONFIG_STORAGE_TOPIC=my_connect_configs \
-e OFFSET_STORAGE_TOPIC=my_connect_offsets \
-e ADVERTISED_HOST_NAME=192.168.31.214 \
-e ADVERTISED_PORT=2181 \
--link zookeeper:zookeeper \
--link kafka:kafka \
--link mysql:mysql \
debezium/connect:0.8
并将host属性修改为
-e ADVERTISED_PORT=2181
两者都没有帮助。
据我了解,有一些属性可以将各个链接绑定到计算机上的端口,但是我找不到该属性。请让我知道我要怎么做。
答案 0 :(得分:1)
我认为-e ADVERTISED_PORT=2181
对于Debezium容器没有意义。那是一个Zookeeper端口,它运行在其他地方,而不是在Debezium内部。同样,对于播发的主机名,这是Kafka服务器的属性,不会由Debezium容器加载(并且也不应使用端口2181)
如果Zookeeper和其他软件在另一台计算机上,则--link将不起作用。该教程假定一切都在一台机器上运行
如果您正在使用Docker Swarm,则需要设置并使用“覆盖网络”。
否则,您需要将Debezium配置指向另一台计算机的外部IP地址。但是,这不是解决问题的“ Docker方法”,因为您不必知道容器在哪些主机上运行。