kafka flink es hive streaming

本文详细介绍了使用Kafka创建和管理主题,以及通过kafka-console-producer和kafka-console-consumer进行生产和消费数据。接着展示了如何在Flink中创建数据源和 Hive 表,并将Kafka数据写入Hive,以及如何从Kafka源读取数据进行数据连接操作。最后提到了将结果数据写入Elasticsearch的示例,以及在Elasticsearch中执行SQL查询的方法。
1.kafka create topic  
kafka-topics.sh --create --bootstrap-server 172.19.68.12:9092 --replication-factor 1 --partitions 1 --topic dev-yuqing-topic-test
2.kafka producer 
kafka-console-producer.sh --broker-list 172.19.68.12.9092 --topic dev-yuqing-topic-test
--num-records 5 --records-size 128000
./kafka-producer-perf-test.sh --num-records 500000 --record-size 3000 --topic test-rep-lww  --producer-props bootstrap.servers=kafka-01:19022,kafka-02:19023,kafka-03:19024

3.kafka consumer
kafka-console-consumer.sh --bootstrap-server 172.19.68.12:9092 --topic dev-yuqing-topic-test 
4.flink source 
create table datagen_50 (
i int ,
ts as localtimestamp ,
watermark for ts as ts 
)with (
'connector'='datagen',
'rows-per-second'='5',
'fields.i.kind'='sequence',
'fields.i.start'='1',
'fields.i.end'='500000'
)
5.hive table 
set table.sql-dialect=hive ;
create table tmp.shalem(
i int 
)partitioned by(ts string)
tblproperties(
'sink.partition-commit.policy.kind'='metastore,success-file',
'sink.partition-commit.success-file.name'='_SUCCESS',  --干什么用的
'sink.partition-commit.delay'='15 s',
'sink.partition-commit.trigger'='partition-time', --process-time
'auto-compaction'='true',      --线程间数据的合并
'compaction.file-size'='128M',
'sink.rolling-policy.rollover-interval'='10 min', --零文件可以保持打开的最大事件
'sink.rolling-policy.check-interval'='2 min'      --零文件检查时间
)
6. kafka write into hive 
insert into tmp.shalem select i ,date_format(ts,'yyyy-MM-dd')from datagen_50;
7.kafka source 
create table kafka_shalem(
i int ,
ts timestamp(3),
proctime as PROCTIME()
)with(
'connector'='kafka',
'topic'='dev-yuqing-topic-test',
'properites.bootstrap.servers'='172.19.68.12:9092',
'properites.group.id'='perf-consumer-12',
'scan.startup.mode'='earlist-offset',
'format'='csv'  --'json'  --'raw'
)
8.kafka data join hive dim table 
select * from 
kafka_shalem t1 
left join 
tmp.shalem 
/*+ OPTIONS('streaming-source.enable'='true','streaming-source.partition.include'='latest','streaming-source.monitor-interval'='1 min','streaming-source.partition-order'='partition-name')*/
 for system_time as of t1.proctime as t2
on t1.i = t2.i 
9.sink es 
create table person_dup_es_sink (
    id          VARCHAR,
    data        VARCHAR
)  with (
    'connector.type' = 'elasticsearch',
    'connector.version' = '6',
    'connector.hosts.0.hostname' = 'remote host',
    'connector.hosts.0.port' = '9200',
    'connector.hosts.0.protocol' = 'http',
    'connector.index' = 'test_index',
    'connector.document-type' = 'person',
    'update-mode' = 'append',
    'format.type' = 'json',
    'format.json-schema' = '{"type":"object", "properties": {"id": {"type": "string"}, "data":{"type":"string"}}}'
)
;

10.kafka-sql 

11.es-sql 需要xpack 插件
cat es-sql 
#!/bin/sh 
/home/es/elasticsearch-7.4.2/bin/elasticsearch-sql-cli url=http://user:passwd@ip:9200  





CREATE VIEW IF NOT EXISTS hive_catalog.flink_db.view_fact_bill_master as
SELECT * FROM
 (select t1.*, t2.group_id, t2.shop_id, t2.group_name, t2.shop_name, t2.brand_id, 
     ROW_NUMBER() OVER (PARTITION BY groupID, shopID, orderKey ORDER BY actionTime desc) rn
    from hive_catalog.flink_db.kfk_fact_bill_master_12 t1
       JOIN hive_catalog.flink_db.dim_extend_shop_info 
     /*+ OPTIONS('streaming-source.enable'='true', 'streaming-source.partition.include' = 'latest',
    'streaming-source.monitor-interval' = '1 h','streaming-source.partition-order' = 'partition-name') */ FOR SYSTEM_TIME AS OF t1.proctime AS t2 --时态表
ON t1.groupID = t2.group_id and t1.shopID = t2.shop_id
    where groupID in (202042)) t  where t.rn = 1

### 技术集成 可以通过Canal与Flink实现MySQL到Hive的数据实时增量同步。Canal解析MySQL的Binlog日志并写入KafkaFlinkKafka消费数据,实现实时的ETL,最终将数据同步到Hive中。关于Canal解析Binlog日志写入Kafka的实现步骤,可参考相关资料;Flink实现实时ETL的过程,可从Binlog流式采集和基于Binlog的ODS数据还原两方面进行,还可将binlog日志写入Kudu、HBase等支持事务操作的NoSQL中,省去数据表还原的步骤 [^2]。 ### 功能特性 - **MySQL**:作为关系型数据库,提供数据存储和管理功能,支持事务处理、SQL查询等,是业务数据的常见存储地。 - **Canal**:模拟MySQL主从复制协议,解析MySQL的Binlog日志,将数据库的变更信息捕获并传递,用于实现数据的实时同步和增量更新。 - **Kafka**:高吞吐量的分布式消息队列,能够高效地处理大量的数据流。可作为数据传输的中间层,缓存和分发Canal传来的Binlog数据,供Flink等系统消费。 - **Flink**:开源的流处理框架,支持实时数据处理和批处理。可以从Kafka读取数据,进行实时的ETL操作,包括数据清洗、转换、聚合等,还能实现复杂的业务逻辑。 - **Hive**:基于Hadoop的数据仓库工具,提供类SQL查询功能,用于对大规模数据进行存储和分析。可将Flink处理后的数据存储到Hive表中,方便后续的数据分析和挖掘。 ### 应用场景 在数据仓库建模中,对于业务DB数据,从MySQL等关系型数据库采集业务数据并导入到Hive中,是数据仓库生产的重要环节。传统批量取数并Load的方案实现简单,但随着业务发展缺点逐渐暴露。采用Canal、KafkaFlink实现的实时增量同步方案,能更准确、高效地把MySQL数据同步到Hive中。此外,在互联网企业中,常见的ODS数据包括业务日志数据和业务DB数据,这种集成方案可用于处理业务DB数据的实时同步和分析 [^2][^3]。 ### 代码示例 以下是一个简单的FlinkKafka读取数据并打印的示例代码: ```java import org.apache.flink.api.common.serialization.SimpleStringSchema; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer; import java.util.Properties; public class FlinkKafkaExample { public static void main(String[] args) throws Exception { // 创建执行环境 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 配置Kafka连接信息 Properties properties = new Properties(); properties.setProperty("bootstrap.servers", "localhost:9092"); properties.setProperty("group.id", "flink-group"); // 创建Kafka消费者 FlinkKafkaConsumer<String> consumer = new FlinkKafkaConsumer<>("test-topic", new SimpleStringSchema(), properties); // 添加数据源 DataStream<String> stream = env.addSource(consumer); // 打印数据 stream.print(); // 执行任务 env.execute("Flink Kafka Example"); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值