实时数据处理:Apache Kafka与Flink实战

实时数据处理:Apache Kafka与Flink实战

大家好,我是欧阳瑞(Rich Own)。今天想和大家聊聊实时数据处理这个重要话题。作为一个全栈开发者,实时数据处理已经成为现代应用的核心能力。今天就来分享一下Apache Kafka和Flink的实战经验。

实时数据处理概述

应用场景

场景 说明
实时监控 实时日志分析、监控告警
实时推荐 个性化推荐系统
实时计算 实时统计、实时报表
实时风控 欺诈检测、异常识别

技术选型

复制代码
消息队列 → Kafka/RabbitMQ
实时计算 → Flink/Spark Streaming
消息存储 → Kafka/Pulsar

Apache Kafka

核心概念

概念 说明
Topic 消息主题
Partition 分区
Producer 生产者
Consumer 消费者
Consumer Group 消费者组

生产者配置

javascript 复制代码
const { Kafka } = require('kafkajs');

const kafka = new Kafka({
  clientId: 'my-app',
  brokers: ['localhost:9092']
});

const producer = kafka.producer();

async function produce() {
  await producer.connect();
  await producer.send({
    topic: 'user-events',
    messages: [
      { value: JSON.stringify({ userId: '1', event: 'login' }) },
      { value: JSON.stringify({ userId: '2', event: 'purchase' }) }
    ]
  });
  await producer.disconnect();
}

消费者配置

javascript 复制代码
const consumer = kafka.consumer({ groupId: 'my-group' });

async function consume() {
  await consumer.connect();
  await consumer.subscribe({ topic: 'user-events', fromBeginning: true });

  await consumer.run({
    eachMessage: async ({ topic, partition, message }) => {
      console.log({
        value: message.value.toString()
      });
    }
  });
}

核心概念

概念 说明
DataStream 数据流
Window 窗口
Operator 算子
State 状态

Flink作业示例

java 复制代码
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer;

public class KafkaFlinkJob {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        
        DataStream<String> stream = env.addSource(new FlinkKafkaConsumer<>(
            "user-events",
            new SimpleStringSchema(),
            properties
        ));
        
        stream
            .map(json -> {
                UserEvent event = parseJson(json);
                return event;
            })
            .keyBy(event -> event.userId)
            .window(TumblingEventTimeWindows.of(Time.minutes(5)))
            .count()
            .print();
        
        env.execute("Kafka Flink Job");
    }
}

实时计算案例

javascript 复制代码
// 使用flink-streaming-java的JavaScript API
const { StreamExecutionEnvironment } = require('flink-streaming-java');

const env = StreamExecutionEnvironment.getExecutionEnvironment();

env.fromCollection([1, 2, 3, 4, 5])
  .map(x => x * 2)
  .filter(x => x > 5)
  .print();

env.execute('Simple Job');

实战案例:实时用户行为分析

复制代码
Kafka → Flink → Redis → Dashboard

1. 用户行为数据写入Kafka
2. Flink消费Kafka,计算实时统计
3. 将结果写入Redis
4. Dashboard从Redis读取数据展示
javascript 复制代码
// Flink处理逻辑
const stream = env.addSource(kafkaConsumer);

stream
  .map(record => JSON.parse(record.value()))
  .keyBy(record => record.userId)
  .window(SlidingEventTimeWindows.of(Time.seconds(30), Time.seconds(10)))
  .aggregate(
    () => ({ count: 0, events: [] }),
    (acc, record) => {
      acc.count++;
      acc.events.push(record);
      return acc;
    },
    (key, window, aggregates) => {
      return { userId: key, count: aggregates.count };
    }
  )
  .addSink(redisSink);

总结

实时数据处理是现代应用的核心能力。通过Kafka和Flink的组合,可以构建高性能的实时数据处理系统。

我的鬃狮蜥Hash对实时处理也有自己的理解------它总是实时监控周围环境,捕捉任何移动的蟋蟀,这也许就是自然界的"实时数据处理"吧!

如果你对实时数据处理有任何问题,欢迎留言交流!我是欧阳瑞,极客之路,永无止境!


技术栈:Apache Kafka · Apache Flink · 实时计算

相关推荐
维克兜率天10 小时前
【维克】量化交易的法律边界:程序化交易和“拔网线“的区别
区块链
Web3_Daisy10 小时前
什么是 Robinhood Chain?
大数据·人工智能·web3·区块链
minhuan12 小时前
大模型Agent核心架构,详解ReAct、Plan-and-Execute、Reason-Act-Observe循环21.6
react·大模型应用·agent架构·ai应用架构设计·plan-execute
名字还没想好☜15 小时前
React useLayoutEffect vs useEffect:页面闪一下的元凶与正确修法
前端·javascript·react.js·react·hooks
黄焖鸡能干四碗17 小时前
IT数据架构规划设计方案(PPT文件)
大数据·网络·数据库·人工智能·架构·区块链
cmes_love2 天前
CME、LME、CBOT、NYMEX等交易所外盘期货tick和分钟历史行情数据下载和分析
数据库·区块链
应用市场2 天前
# 从零搭建一个 Kraken 永续合约量化交易机器人:架构设计、踩坑实录与风险思考
区块链
双缝观察者2 天前
现金兑换虚拟资产,技术追溯与角色切割
区块链
北冥you鱼2 天前
ERC-20 代币实战:从铸造到转账的完整开发指南
区块链
怒放de生命20103 天前
【web3基础】go-zero环境搭建(一)
开发语言·后端·golang·web3·区块链