我正在使用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数据库中什么都没有显示!
如果有人能帮助我,我会很感激。
答案 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 变量对于解决这个问题非常重要