Kafka-connect问题

时间:2017-08-10 09:41:11

标签: apache-kafka apache-kafka-connect

我在centos 7上安装了Apache Kafka(汇合),我试图在分布式模式下运行文件流kafka connect但是我收到了以下错误:

[2017-08-10 05:26:27,355] INFO Added alias 'ValueToKey' to plugin 'org.apache.kafka.connect.transforms.ValueToKey' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:290)
Exception in thread "main" org.apache.kafka.common.config.ConfigException: Missing required configuration "internal.key.converter" which has no default value.
at org.apache.kafka.common.config.ConfigDef.parseValue(ConfigDef.java:463)
at org.apache.kafka.common.config.ConfigDef.parse(ConfigDef.java:453)
at org.apache.kafka.common.config.AbstractConfig.<init>(AbstractConfig.java:62)
at org.apache.kafka.common.config.AbstractConfig.<init>(AbstractConfig.java:75)
at org.apache.kafka.connect.runtime.WorkerConfig.<init>(WorkerConfig.java:197)
at org.apache.kafka.connect.runtime.distributed.DistributedConfig.<init>(DistributedConfig.java:289)
at org.apache.kafka.connect.cli.ConnectDistributed.main(ConnectDistributed.java:65)

现在通过更新http://docs.confluent.io/current/connect/userguide.html#connect-userguide-distributed-config

中提到的workers.properties来解决这个问题

Command used:

/home/arun/kafka/confluent-3.3.0/bin/connect-distributed.sh ../../../properties/file-stream-demo-distributed.properties

Filestream properties file (workers.properties):

name=file-stream-demo-distributed
connector.class=org.apache.kafka.connect.file.FileStreamSourceConnector
tasks.max=1
file=/tmp/demo-file.txt
bootstrap.servers=localhost:9092,localhost:9093,localhost:9094
config.storage.topic=demo-2-distributed
offset.storage.topic=demo-2-distributed
status.storage.topic=demo-2-distributed
key.converter=org.apache.kafka.connect.json.JsonConverter
key.converter.schemas.enable=true
value.converter=org.apache.kafka.connect.json.JsonConverter
value.converter.schemas.enable=true
internal.key.converter=org.apache.kafka.connect.json.JsonConverter
internal.key.converter.schemas.enable=false
internal.value.converter=org.apache.kafka.connect.json.JsonConverter
internal.value.converter.schemas.enable=false
group.id=""

我在下面添加了属性,命令没有任何错误。

bootstrap.servers=localhost:9092,localhost:9093,localhost:9094
config.storage.topic=demo-2-distributed
offset.storage.topic=demo-2-distributed
status.storage.topic=demo-2-distributed
group.id=""

但是,现在当我运行consumer命令时,我无法在/tmp/demo-file.txt中看到这些消息。如果有办法可以检查消息是否发布到kafka主题和分区,请告诉我?

kafka-console-consumer --zookeeper localhost:2181 --topic demo-2-distributed --from-beginning

我相信我错过了一些非常基本的东西。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您需要为Kafka connect框架定义唯一主题,以存储其配置,偏移和状态。

在workers.properties文件中,将这些参数更改为以下内容:

config.storage.topic=demo-2-distributed-config
offset.storage.topic=demo-2-distributed-offset
status.storage.topic=demo-2-distributed-status

这些主题用于存储connect和 not 的状态和配置元数据,用于存储在connect之上运行的任何连接器的消息。不要在这三个主题中的任何一个上使用控制台消费者,并希望看到消息。

消息存储在连接器配置json中配置的主题中,其参数名为“topic”。

示例file-sink-config.json文件

{
  "name": "MyFileSink",
  "config": {
      "topics": "mytopic",
      "connector.class": "org.apache.kafka.connect.file.FileStreamSinkConnector",
      "tasks.max": 1,
      "key.converter": "org.apache.kafka.connect.storage.StringConverter",
      "value.converter": "org.apache.kafka.connect.storage.StringConverter",
      "file": "/tmp/demo-file.txt"
    }
}

分布式工作器运行后,您需要使用curl将配置文件应用于它:

curl -X POST -H "Content-Type: application/json" --data @file-sink-config.json http://localhost:8083/connectors

之后,配置将安全地存储在您为所有分布式工作人员创建的配置主题中。确保配置主题(以及状态和偏移主题)不会使消息过期,否则您将失去连接器配置。