使用Docker将Kafka主题数据写入Redis

时间:2019-09-15 06:52:43

标签: docker redis apache-kafka apache-kafka-connect

我正在使用this repository kafka连接到Redis。

说明:我要做的是使用docker将kafka主题数据写入redis。他们创建了一个自述文件来指导如何设置kafka的配置:

curl -s -X POST -H 'Content-Type: application/json' --data @connector.json http://localhost:8083/connectors

connector.json文件包含:

{
  "config" : {
    "name" : "RedisSinkConnector1",
    "connector.class" : "com.github.jcustenborder.kafka.connect.redis.RedisSinkConnector",
    "tasks.max" : "1",
    "topics" : "mostafa"
  }
}

问题::我知道如何在kafka中创建新主题,但是问题是我不知道如何更改docker-compose或测试连接。当我在kafka中创建了一个新主题时,redis数据库中什么都没有显示!

如果有人能帮助我,我会很感激。

2 个答案:

答案 0 :(得分:0)

对于初学者来说,那里的compose文件中没有Kafka Connect容器,因此您需要添加一个容器,或者在主机上的Docker外部启动Kafka Connect。

然后,不清楚是否已正确加载Redis连接器,因此打开http://localhost:8083/connector-plugins来查看它是否正确(这还将验证您是否已启动Connect Server}

完成后,您可以发布配置(您将需要删除隐藏卷发输出的-s)。发布后,您将要检查正在运行的Connect进程的日志,或者也可以转到http://localhost:8083/connectors/RedisSinkConnector1/status

鉴于您所显示的内容,到此为止,以上两种都可能谈到了与localhost:6379的连接异常有关的内容,因为这是默认连接。您必须提供"redis.hosts": "redis:6379"作为属性。

然后,也在文档中提到

  

此连接器希望Kafka中的记录具有作为字节或字符串存储的键和值

因此,也可以在属性中添加键和值转换器以及指定数据类型,这也没有什么坏处。如果您直接使用Confluent的Connect容器,则可能设置为使用Avro转换器,而不是字符串或字节

这是您可以开机自检的有效配置示例

{
  "name" : "RedisSinkConnector1",
  "config" : {
    "connector.class" : "com.github.jcustenborder.kafka.connect.redis.RedisSinkConnector",
    "tasks.max" : "1",
    "topics" : "mostafa",
    "redis.hosts": "redis:6379",
    "key.converter": "org.apache.kafka.connect.storage.StringConverter",
    "value.converter": "org.apache.kafka.connect.storage.StringConverter"
  }
}

通过这些调整,我认为发送任何简单的键值消息都可以,然后使用redis-cli运行一些扫描/获取键查询

答案 1 :(得分:0)

以下配置可以解决问题。

{
  "name" : "RedisSinkConnector1",
  "config" : {
    "connector.class" : "com.github.jcustenborder.kafka.connect.redis.RedisSinkConnector",
    "tasks.max" : "1",
    "topics" : "mostafa",
    "redis.hosts": "redis:6379",
    "key.converter": "org.apache.kafka.connect.storage.StringConverter",
    "value.converter": "org.apache.kafka.connect.storage.StringConverter"
  }
}

在 docker-compose 文件中添加 kafka-connect

kafka-connect:
    hostname: kafka-connect
    image: confluentinc/cp-kafka-connect:latest
    container_name: kafka-connect
    ports:
      - 8083:8083
    depends_on:
      - schema-registry
      **- redis**
    environment:
      CONNECT_BOOTSTRAP_SERVERS: kafka:9092
      CONNECT_REST_PORT: 8083
      CONNECT_GROUP_ID: "quickstart-avro"
      CONNECT_CONFIG_STORAGE_TOPIC: "quickstart-avro-config"
      CONNECT_OFFSET_STORAGE_TOPIC: "quickstart-avro-offsets"
      CONNECT_STATUS_STORAGE_TOPIC: "quickstart-avro-status"
      CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1
      CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1
      CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1
      CONNECT_KEY_CONVERTER: "org.apache.kafka.connect.json.JsonConverter"
      CONNECT_VALUE_CONVERTER: "org.apache.kafka.connect.json.JsonConverter"
      CONNECT_INTERNAL_KEY_CONVERTER: "org.apache.kafka.connect.json.JsonConverter"
      CONNECT_INTERNAL_VALUE_CONVERTER: "org.apache.kafka.connect.json.JsonConverter"
      **CONNECT_REST_ADVERTISED_HOST_NAME: "kafka-connect"**
      CONNECT_LOG4J_ROOT_LOGLEVEL: DEBUG
      CONNECT_PLUGIN_PATH: "/usr/share/java,/etc/kafka-connect/jars"
    volumes:
      - $PWD/jars:/etc/kafka-connect/jars

depends_on redis 和 CONNECT_REST_ADVERTISED_HOST_NAME 变量对于解决这个问题非常重要