场景
工作中遇到需要将业务开发写入kafka队列的数据消费并插入到clickhouse的场景。
一般情况下,我都会选择别人写好的服务来进行这种需要健壮性的操作。这里
我们选用了https://github.com/childe/gohangout
然而我们的业务开发人员将数据进行了base64编码,而这个服务不支持解码。
要不然也不会有这篇博客。这里我实名diss一下老甘。
脚本
import pymysql
from SQL import *
from clickhouse_driver import Client
from kafka import KafkaConsumer
import base64
import json
import time
from datetime import datetime
import logging
from settings import MySQLSettings
class CK:
def __init__(self,host:str,port:int,user:str,password:str,database:str):
self.database = database
self.client = Client(host = host,port=port,password = password,user = user)
def insert_data(self,table:str,columns:list,data:list):
"""
如果不存在表就创建,存在表则比较表字段与数据字段是否一致,一致插入
:param table: 数据插入表
:param columns: 数据插入表的字段
:param data: 数据
:return: Bool
"""
self.client.execute(create_database_SQL.format(database=self.database))
self.client.execute(create_table_SQL.format(database=self.database,table=table))
columns_SQL = """DESC `{database}`.`{table}`""".format(database = self.database,table = table)
cols = set()
for item