Kafka日志写入Doris
- 实现方式 - 采用 Routine Load 官方文档:Routine Load - Apache Doris- 采用 SparkStreaming实时消费Kafka后写入Doris,在日志记录场景(只写不删,不覆盖,不聚合...),我们使们前者;- Doris 可以通过 Routine Load 导入方式持续消费 Kafka Topic 中的数据。在提交 Routine Load 作业后,Doris 会持续运行该导入作业,实时生成导入任务不断消费 Kakfa 集群中指定 Topic 中的消息。
- 我们的日志数据由log4net推入Kafka后是一串JSON格式,大致如下格式:
[
{
"partition": 0,
"offset": 49,
"msg": "{\"log_timestamp\":1715752796717,\"business\":\"example.business.project\",\"service\":\"example.service\",\"host_ip\":\"YFB-CTO\",\"level\":\"INFO\",\"logger_name\":\"Web.Controllers.RoleController\",\"message\":\"########### \\u8FD9\\u662F\\u624B\\u52A8\\u8F93\\u51FA\\u7684\\u4E2D\\u6587\\u65E5\\u5FD7\\u4FE1\\u606F ###########\",\"request_path\":null,\"request_parameter\":null,\"request_method\":null,\"request_header\":null,\"status_code\":null,\"request_response_time\":0,\"exception\":null}",
"timespan": 1715752796716,
"date": "2024-05-15 13:59:56"
}
]
- 创建 Routine Load 导入作业
- 语法
CREATE ROUTINE LOAD [db.]job_name [ON tbl_name] [merge_type] [load_properties] [job_properties] FROM data_source [data_source_properties] [COMMENT "comment"]
- 在 Doris 中,使用 CREATE ROUTINE LOAD 命令,创建导入作业
CREATE ROUTINE LOAD biz_log_db.ods_example_service_log_routine_load_json ON ods_example_service_log COLUMNS(log_timestamp,business,service,host_ip,level,logger_name,message,request_path,request_parameter,request_method,request_header,response_content,status_code,request_response_time,exception,log_time=from_millisecond(log_timestamp)) PROPERTIES( "desired_concurrent_number"="3", "max_batch_interval" = "20", "max_batch_rows" = "300000", "max_batch_size" = "209715200", "strict_mode" = "false", "format"="json", "jsonpaths"="[\"$.log_timestamp\",\"$.business\",\"$.service\",\"$.host_ip\",\"$.level\",\"$.logger_name\",\"$.message\",\"$.request_path\",\"$.request_parameter\",\"$.request_method\",\"$.request_header\",\"$.response_content\",\"$.status_code\",\"$.request_response_time\",\"$.exception\"]" ) FROM KAFKA( "kafka_broker_list" = "192.168.2.111:9092,192.168.2.184:9092,192.168.2.156:9092", "kafka_topic" = "example-service-log", "property.kafka_default_offsets" = "OFFSET_BEGINNING", "property.deserializer.encoding" = "UTF-8" ) COMMENT "示例服务日志记录同步 KAFKA ROUTINE LOAD 配置";
- 说明 - 请参考官方文档:CREATE-ROUTINE-LOAD - Apache Doris- 示例中通过 json_root 抽取根节点的元素进行解析,以简化配置。- OFFSET_BEGINNING: 表示从有数据的位置开始订阅。- 上述配置表示:自动默认消费所有分区,且从有数据的位置(OFFSET_BEGINNING)开始订阅- 查看导入运行任务- - 查看导入运行作业 - 创建 routine load 任务之后,可以通过show routine load命令查看运行状态的例行任务,如果在show routine load中没有找到对应的例行任务,则可能因为例行任务失败或者错误数过多被停止或者暂停,使用show all routine load查看所有状态的例行任务。- - 暂停导入作业 - PAUSE-ROUTINE-LOAD - Apache Doris- 恢复(重启)导入作业 - RESUME-ROUTINE-LOAD - Apache Doris- 修改导入作业 - ALTER-ROUTINE-LOAD - Apache Doris- 取消(停止)导入作业 - STOP-ROUTINE-LOAD - Apache Doris- 问题排查- 先执行“SHOW ALL ROUTINE LOAD;”,找出有问题的ROUTINE-LOAD,拖到最右边,看到“ErrorLogUrls”,如下:- - 复制ErrorLogUrls,在浏览器里打开,查看错误信息,如下:- - 看一下数据- - 最后:经过实测,已经取消的ROUTINE LOAD是没办法手动删除的,Doris会自动删除,不过这个过程等了好几天,过了一个周未才发现自动删除了已经取消的ROUTINE LOAD,如下:-
本文转载自: https://blog.csdn.net/nick_huangzheng/article/details/138814711
版权归原作者 nick_huangzheng 所有, 如有侵权,请联系我们删除。
版权归原作者 nick_huangzheng 所有, 如有侵权,请联系我们删除。