简单的kafka和flink实现实时计算引擎处理数据

1、启动kafka和flink以及hadoop

为了方便操作,mac可以下载Tabby软件

1.1 启动kafka:进入kafka目录
	bin/kafka-server-start.sh config/server.properties
1.2 创建kafka
	进入bin目录   
	./kafka-topics.sh —create —bootstrap-server qf01:9092 —replication-factor 1 —partition 1 —topic test
1.3 启动生产者和消费者
    生产者:./kafka-console-producer.sh --broker-list qf01:9092 --topic test
    消费者:./kafka-console-consumer.sh --bootstrap-server qf01:9092 --topic test --from-beginning
1.4 启动hadoop集群
	start-all.sh
1.5 启动zk集群
	zkServer.sh start
1.6 启动flink
	start-cluster.sh

2、代码实现

2.1 创建生产者的代码

JProducer.class

@Configuration
@Slf4j
public class JProducer extends Thread {
    public static final String broker_list = "ip(换成自己的):9092";
    public static final String topic = "test";

    public static void main(String[] args) {
        JProducer jproducer = new JProducer();
        jproducer.start();
    }

    @Override
    public void run() {
        try {
            producer();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }


    /**
     * 向kafka批量生成记录
     */
    @Scheduled(initialDelayString="${kf.flink.init}",fixedDelayString = "${kf.flink.fixRate}")
    private void producer() throws InterruptedException {
        log.info("启动定时任务");
        Properties props = config();//kafka连接
        Producer<String, String> producer = new KafkaProducer<>(props);
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String dateString = simpleDateFormat.format(date);
        while (true) {
            for (int i = 1; i <= Integer.MAX_VALUE; i++) {
                String json = "{\"id\":" + i + ",\"ip\":\"192.168.0." + i + "\",\"date\":" + dateString + "}";
                String k = "第" + i + "条数据=" + json;
                sleep(300);
                if (i % 10 == 0) {
                    sleep(1000);
                }
                producer.send(new ProducerRecord<String, String>(topic, k, json));
            }
           producer.close();
        }
    }


    /**
     * kafka连接
     * @return
     */
    private Properties config() {
        Properties props = new Properties();
        props.put("bootstrap.servers",broker_list);
        props.put("acks", "1");
        props.put("retries", 0);
        props.put("batch.size", 16384);
        props.put("linger.ms", 1);
        props.put("buffer.memory", 33554432);
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        return props;
    }


}

2.2 创建flink程序

Flink.class


public class Flink {
    private static final String topic = "test";
    public static final String broker_list = "ip(换成自己的):9092";

    public static void main(String[] args) {
        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.enableCheckpointing(1000);
        env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
        //读取Kafka数据,主题topic:
        DataStream<String> transction = env.addSource(new FlinkKafkaConsumer<String>(topic, new SimpleStringSchema(), props()).setStartFromEarliest());
        transction.rebalance().map(new MapFunction<String, Object>() {
            private static final long serialVersionUID = 1L;
            @Override
            public String map(String value) {
                System.out.println("ok了");
                return value;
            }
        }).print();

        try {
            env.execute();
        } catch (Exception ex) {
            ex.printStackTrace();
        }


    }

    public static Properties props() {
        Properties props = new Properties();
        props.put("bootstrap.servers", broker_list);
        props.put("zookeeper.connect", "192.168.47.130:2182");
        props.put("group.id", "kv_flink");
        props.put("enable.auto.commit", "true");
        props.put("auto.commit.interval.ms", "1000");
        props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        return props;
    }

}

3、把项目打包放入hdfs中

hdfs dfs -put xxx.jar /root/xxx.jar

4、执行flink程序

	进入flink的bin目录
	./flink run --class com.xxx.xxx.MyWordCount1  /root/jar

5、打开web页面

请添加图片描述

6、额外扩展点

主要是配置一些属性字段,可以参考flink的的配置文件
到flink/conf/flink-conf.yaml中

      //一旦开启是耗性能的 这是创建一次 300ms创建一次
        env.enableCheckpointing(300);
        env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
        env.getCheckpointConfig().setMaxConcurrentCheckpoints(2);
        //2、设置重启策略,重启三次,没10秒执行一次   failureRateRestart 失败率重启
        env.setRestartStrategy(RestartStrategies.fixedDelayRestart(3,10000L));
        //3、并行度setParallelism()
        env.setParallelism(1);
        //4、时间特性  参数 TimeCharacteristic 有三种类型: ProcessingTime, IngestionTime, EventTime;
        env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
        //5、并行任务调度策略
        //1、EagerSchedulingStrategy:适用于流计算,同时调度所有的task
        //2、LazyFromSourcesSchedulingStrategy:适用于批处理,当输入数据准备好时(上游处理完)进行vertices调度。
        //3、PipelinedRegionSchedulingStrategy:以流水线的局部为粒度进行调度。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: FlinkKafka 是一种分布式数据处理架构,可以帮助企业构建实时的、可靠的数据处理流程,为企业应用提供实时数据服务。Flink 是 Apache 的一项开源项目,提供简单、高效、可靠的数据处理架构,Kafka 是一种分布式消息队列,支持高性能的消息传输。它们可以结合在一起,为企业提供实时数据处理能力。 ### 回答2: Kafka Flink数据处理架构是一种将Apache Kafka与Apache Flink集成的架构设计。Apache Kafka是一种高性能、可持久化、分布式流处理平台,而Apache Flink是一种强大的流处理框架。 在Kafka Flink数据处理架构中,Kafka作为数据源,负责收集、存储和分发数据数据可以以流的形式实时流入Kafka,并被分为多个主题(topics)。每个主题可以有多个分区(partitions),以提高负载均衡和可伸缩性。 Flink作为数据处理引擎,连接到Kafka集群,实时处理Kafka主题中读取的数据Flink提供了各种功能和API来对数据进行转换、计算和分析,并将结果写回到Kafka主题或其他外部存储系统。 在Kafka Flink数据处理架构中,Flink提供了一些关键概念和机制来处理数据流。例如,窗口功能允许对数据流进行时间或其他属性的分段处理,以便进行聚合操作。流与表之间的无缝转换使得可以方便地进行复杂的流和批处理操作。 此外,Kafka Flink数据处理架构还支持故障处理和容错机制。Flink可以使用检查点机制来定期记录流处理应用程序的状态,并在故障恢复时恢复到最后一个一致的状态。 总而言之,Kafka Flink数据处理架构结合了KafkaFlink的优势,为实时数据处理提供了可靠,高效和可伸缩的解决方案。它能够处理大量的数据流,并提供丰富的功能和灵活的API来满足不同的数据处理需求。 ### 回答3: Kafka Flink数据处理架构是一种常用的大数据处理架构,它结合了Apache Kafka和Apache Flink这两个开源项目的特性,实现了高效、可扩展的数据处理。 在这个架构中,Apache Kafka充当着数据引擎的角色。它是一个分布式的流处理平台,用于高吞吐量、低延迟的发布和订阅消息。Kafka以主题(topic)为单位组织数据流,生产者将数据发布到特定的主题,消费者则从主题中订阅和消费数据Kafka保证了消息的持久化存储和高可用性,能够支持大规模的数据处理。 而Apache Flink则是一个分布式流处理框架,用于在数据流中进行实时的、有状态的计算和分析。Flink提供了丰富的流处理操作符和函数,可以进行窗口聚合、数据转换、流量控制等操作。Flink具有低延迟、高吞吐量的特性,并且支持Exactly-once语义,保证了数据的准确性和一致性。 在Kafka Flink数据处理架构中,Kafka作为输入源和输出目的地,将数据流通过主题传输到FlinkFlink通过Kafka的消费者接口实时获取数据流,进行各种计算处理操作,并将结果写回到Kafka的指定主题。这种架构可以实现大规模数据实时处理和分析,具有高度容错性和可伸缩性。 此外,Kafka Flink数据处理架构还支持和其他数据存储和计算系统的集成,可以将计算结果写回到数据库、数据仓库或其他存储系统中,也可以将处理过的数据传输给其他分布式计算框架进行更复杂的计算和分析。 总之,Kafka Flink数据处理架构是一个强大而灵活的大数据处理方案,能够支持实时处理和分析,实现高效可扩展的数据处理

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值