Vertica使用COPY从SSL/TLS认证Kafka集群导入数据配置疑问
关于Vertica KafkaSource SSL证书配置的说明
CA根证书、SSL客户端证书/私钥这类SSL相关配置,两种设置方式都支持,既可以通过KafkaSource的kafka_conf参数直接传入,也可以通过会话变量设置,优先推荐使用kafka_conf参数传入的方式,灵活性更高。
方式1:通过kafka_conf参数直接传入(推荐)
直接将SSL相关配置项追加到你现有kafka_conf的取值里,多个配置项用分号分隔即可,需要注意所有配置对应的证书/密钥文件,必须在Vertica集群的所有节点上都存储在相同的路径下,且Vertica运行用户有读取权限。
示例修改后的COPY语句:
COPY TEST_TABLE SOURCE KafkaSource( stream='test-topic|0|0', brokers='kafka-lab.com:32090', stop_on_eof=true, group_id='test-topic', kafka_conf='sasl.username=test_user;sasl.password=test_password;sasl.mechanism=PLAIN;security.protocol=SASL_SSL;ssl.ca.location=/opt/vertica/config/kafka_ca.crt' ) PARSER KafkaJSONParser(flatten_arrays=True, flatten_maps=True) ABORT ON ERROR REJECTMAX 1;
如果你的Kafka集群要求双向SSL认证,还需要追加以下配置到kafka_conf中:
ssl.certificate.location:客户端证书文件路径ssl.key.location:客户端私钥文件路径ssl.key.password:客户端私钥的密码(如无密码可省略)
方式2:通过会话变量设置
在执行COPY语句前,先通过SET语句设置对应会话变量,示例如下:
-- 设置CA根证书路径 SET KafkaSASLCAFile = '/opt/vertica/config/kafka_ca.crt'; -- 双向认证需要额外设置以下变量 SET KafkaSASLCertificateFile = '/opt/vertica/config/client.crt'; SET KafkaSASLKeyFile = '/opt/vertica/config/client.key'; SET KafkaSASLKeyPassword = 'your_private_key_password';
这种方式仅对当前会话生效,如果需要在多个会话中使用,需要每次会话执行前重复设置,且无法为不同Kafka集群配置不同证书,适用性低于kafka_conf传参的方式。
无数据导入的常见排查点
你当前执行无数据返回,大概率是缺少SSL相关配置导致连接Kafka失败,可以按以下步骤排查:
- 执行查询查看COPY操作的错误日志:
SELECT * FROM COPY_EVENTS WHERE TABLE_NAME = 'TEST_TABLE' ORDER BY EVENT_TIMESTAMP DESC LIMIT 10; - 确认
stream参数指定的分区和偏移量是否正确,如果你指定的偏移量小于该分区当前的最早有效偏移量,也会读取不到数据 - 确认所有Vertica节点上都存在配置的证书文件,且文件权限允许Vertica运行用户读取
内容的提问来源于stack exchange,提问作者Elias Ghali
相关产品推荐
相关产品推荐

