消费kafka内日志数据

1、 使用logstash 消费kafka内采集的数据

数据来源:

https://www.elastic.co/guide/en/logstash/current/plugins-inputs-kafka.html

数据输出

https://www.elastic.co/guide/en/logstash/current/plugins-outputs-file.html

https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html#plugins-outputs-elasticsearch-sniffing_path

数据过滤:

https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html

Grok 匹配选项

https://github.com/logstash-plugins/logstash-patterns-core/blob/main/patterns/ecs-v1/grok-patterns

Logstash 脚本示例 https://blog.youkuaiyun.com/Q748893892/article/details/101349888

# 输入数据源,配置上 kakfa 连接设置
input {
    kafka {
         bootstrap_servers => ["10.11.12.13:10193","10.11.12.17:10193"]
         client_id => "test"
#         auto_offset_reset => "latest"
         topics => ["test_log_caoke"]
         consumer_threads => 5
         group_id => 'logstash'
    }
}
# 过滤规则,通过 filebeat ,写入 kafka ,在通过logstash消费时,冗余的字段
filter {
                # 1.把当前消息中的 message 字段提取出来,作为一个新的消息体
        json {
               source => "message"
        }
        # 2.把1中生成的新消息体,去掉下面的字段
        mutate {
                remove_field => ["@version","@timestamp","fields"]
        }
        # 3.此时就剩下message 一个字段,对此字段进行拆分,以 & 分开,然后以 = ,组成 kv 格式
        kv {
               source => "message"
               field_split => "&?"
        }
        # 4. 移除掉原始的 message 字段
        mutate {
                remove_field => ["message"]
        }
        # 5.判断 content 字段是否存在,不存在删除
        if ![content] {
                drop {}
        }
        # 6.对content 进行url解码
        urldecode {
                field => "content"
        }
        # 7. 对content进行json格式化,并且赋值给content
        json {
                source => "content"
                target => "content"
        }

}
# 写入到elasticsearch中
output {
   elasticsearch {
         hosts => ["elasticsearch.com:80"]         # 不加端口号,会默认给一个
         index =>  "test_log_caoke_200190924" # 索引名称,不加 document_type 会默认创建一个叫 doc 的type
    }
    stdout {
        codec => rubydebug
    }
    file {
        path => "/your/log/path/logstash-%{+yyyy-MM-dd-HH}.log" # 使用 Logstash 内置日期格式,每小时轮换日志文件
        codec => line { format => "%{message}" }
    }
}

2、go语言实现kafka 消费者

https://www.alibabacloud.com/help/zh/sls/user-guide/use-sarama-kafka-go-to-achieve-kafka-consumption

3、python kafak消费

"""
读取 kafka 的用户操作数据并打印
"""
from kafka import KafkaConsumer

topic = 'test1'
bootstrap_servers = ['localhost:9092']
group_id = 'group7'

consumer = KafkaConsumer(
    topic,  # topic的名称
    #group_id=group_id,  # 指定此消费者实例属于的组名,可以不指定
    bootstrap_servers=bootstrap_servers,  # 指定kafka服务器
    auto_offset_reset='latest',  # 'smallest': 'earliest', 'largest': 'latest'
)

for msg in consumer:
    print(msg.value.decode('utf-8').encode('utf-8').decode('unicode_escape'))

4、Flink 消费kafka

16. [Flink]自定义序列化消费Kafka数据 ‒ Code-Cookbook 0.2 文档

在将 Kafka 中的数据消费并存储到 ClickHouse 的过程中,通常会采用 ClickHouse 提供的 Kafka 引擎表来实现数据的实时消费与存储。这种方式能够直接从 Kafka 主题中读取数据,并将其转换为 ClickHouse 可处理的格式进行存储。 ClickHouse 提供了 `Kafka` 类型的引擎表,用于从 Kafka消费数据。这种引擎表可以作为一个中间表,接收来自 Kafka数据流,随后通过 `MATERIALIZED VIEW` 或 `SELECT` 查询将数据写入实际的存储表中。通过这种方式,可以实现数据Kafka 到 ClickHouse 的实时同步[^1]。 以下是一个典型的数据消费和存储流程: 1. 创建 Kafka 引擎表,指定 Kafka 的 broker 地址、主题、消费组等参数。 2. 创建目标表,用于存储实际数据。 3. 创建物化视图,将 Kafka 表中的数据实时写入目标表。 示例代码如下: ```sql -- 创建 Kafka 引擎表 CREATE TABLE kafka_table ( id UInt64, name String, timestamp DateTime ) ENGINE = Kafka('kafka-broker1:9092', 'topic_name', 'consumer_group', 'JSONEachRow'); -- 创建目标存储表 CREATE TABLE target_table ( id UInt64, name String, timestamp DateTime ) ENGINE = MergeTree() ORDER BY (id, timestamp); -- 创建物化视图,将 Kafka 表中的数据写入目标表 CREATE MATERIALIZED VIEW mv_kafka_to_target TO target_table AS SELECT id, name, timestamp FROM kafka_table; ``` 在上述配置中,`Kafka` 表会持续监听 Kafka 主题中的新消息,并将数据通过物化视图插入到 `target_table` 中。`MergeTree` 是 ClickHouse 中常用的存储引擎,适用于大规模数据的高效查询。 需要注意的是,Kafka 表的消费行为依赖于 Kafka消费者组机制。如果 Kafka 主题中的数据格式发生变化,例如字段增减或类型变更,需要同步调整 Kafka 表和目标表的结构以保证数据一致性[^1]。 此外,为了提高数据消费的吞吐量和稳定性,建议根据实际业务需求调整 Kafka 表的配置参数,例如 `kafka_num_consumers`(消费者数量)、`kafka_max_block_size`(每次消费的最大数据量)等。这些参数可以在 `Kafka` 表的定义中通过 `SETTINGS` 子句进行配置。 ### 数据格式支持 ClickHouse 的 Kafka 引擎支持多种数据格式,包括 `JSONEachRow`、`CSV`、`TSV` 等。在实际应用中,应根据 Kafka 消息的实际格式选择合适的解析方式。例如,如果 Kafka 中的消息是以 JSON 格式发送的,则应使用 `JSONEachRow` 格式进行解析;如果消息是以 CSV 格式发送的,则应使用 `CSV` 格式。 ### 错误处理与监控 在 Kafka 数据消费过程中,可能会遇到数据格式不匹配、网络异常等问题。为了避免这些问题导致数据丢失或写入失败,建议启用 ClickHouse 的日志记录功能,并结合外部监控工具对 Kafka 表的消费状态进行实时监控。此外,可以通过 `system.kafka_log` 表查看 Kafka 消费过程中的详细日志信息,帮助排查问题[^1]。 ### 总结 通过 ClickHouse 的 Kafka 引擎表,可以高效地实现从 Kafka 到 ClickHouse 的数据消费与存储。结合物化视图和合适的存储引擎,可以实现数据的实时同步与持久化。同时,合理配置 Kafka 表的参数和数据格式,有助于提升系统的稳定性和性能。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值