Kafka与Flume、Kettle

 Kafka

高性能分布式消息系统 —— Kafka - 简书

apache-kafka-3.6.2安装包下载_开源镜像站-阿里云 (aliyun.com)

事件流

事件流相当于人体中枢神经系统的数字化。它是“永远在线”世界的技术基础,在这个世界中,企业越来越多地由软件定义和自动化,软件的用户更多地是软件。从技术上讲,事件流是以事件流的形式从数据库、传感器、移动设备、云服务和软件应用程序等事件源实时捕获数据的实践;持久存储这些事件流以供以后检索;实时和回顾性地操作、处理事件流并对其做出反应;并根据需要将事件流路由到不同的目标技术。 因此,事件流可确保数据的连续流动和解释,以便正确的信息在正确的时间出现在正确的位置。

事件流适用于众多行业和组织的各种用例。 它的许多例子包括:

  • 实时处理支付和金融交易,例如在证券交易所、银行和保险中。
  • 实时跟踪和监控汽车、卡车、车队和货运,例如物流和汽车行业。
  • 持续捕获和分析来自物联网设备或其他设备(例如工厂和风电场)的传感器数据。
  • 收集客户互动和订单并立即做出反应,例如零售、酒店和旅游业以及移动应用程序。
  • 监测医院护理中的患者并预测病情变化,以确保在紧急情况下及时得到治疗。
  • 连接、存储并提供公司不同部门生成的数据。
  • 作为数据平台、事件驱动架构和微服务的基础。

Kafka 结合了三个关键功能,因此可以使用一个经过实战检验的解决方案来实现端到端事件流的用例:

  1. 发布(写入)和订阅(读取)事件流,包括从其他系统持续导入/导出数据。
  2. 根据需要持久可靠地存储事件流。
  3. 在事件发生时或回顾性地处理事件流。

所有这些功能都是以分布式、高度可扩展、弹性、容错和安全的方式提供的。 Kafka 可以部署在裸机硬件、虚拟机和容器上,也可以部署在本地和云端。 您可以选择自行管理 Kafka 环境,也可以选择使用各种供应商提供的完全托管服务。

Kafka是一个开源的、分布式的、高吞吐量的发布-订阅消息系统,主要用于构建实时数据管道和流应用。以下是Kafka工作的简要概述:

  1. 核心组件

    • Producer(生产者):负责向Kafka发送消息的应用程序或设备。生产者可以将消息发送到特定的Topic(主题)。
    • Broker(代理):Kafka集群中的服务器节点,负责存储和转发消息。每个Broker都可以处理多个Topic,而每个Topic又可以分为多个Partition(分区)。
    • Consumer(消费者):从Kafka读取并处理消息的应用程序。消费者可以订阅一个或多个Topic,并从这些Topic的Partition中拉取消息进行消费。
    • Topic(主题):Kafka中的消息分类,可以看作是一个消息队列。生产者向Topic发送消息,消费者从Topic中读取消息。
    • Partition(分区):Topic的物理存储单元,每个Partition都可以看作是一个有序的、不可变的消息序列。Kafka通过Partition实现了数据的水平扩展和并行处理。
  2. 工作原理

    • 生产者发送消息:生产者将消息发送到指定的Topic,可以选择发送到特定的Partition或使用Kafka的分区策略进行自动分区。消息在发送时会被分配一个唯一的Offset(偏移量),用于标识消息在Partition中的位置。
    • Broker存储消息:Broker接收到消息后,将其存储在对应的Partition中。Kafka使用日志结构存储消息,可以提供高效的读写性能。同时,Kafka支持消息的持久化存储,即使系统崩溃也不会丢失数据。
    • 消费者读取消息:消费者从Kafka订阅Topic并获取分配的Partition,然后从Partition中拉取消息进行消费。消费者可以根据自己的需求设置拉取策略,如批量拉取、定时拉取等。同时,Kafka支持多个消费者组(Consumer Group)同时消费同一个Topic的数据,实现数据的并行处理。
    • 消费者位移(Offset)管理:Kafka通过消费者位移来记录每个消费者在每个Partition上消费的位置。当消费者消费完一条消息后,会更新其位移值。如果消费者发生故障或重新加入消费者组,Kafka会根据最新的位移值重新分配Partition给消费者,确保数据的正确消费。
  3. 特点

    • 高吞吐量:Kafka通过优化磁盘I/O和网络传输等关键技术,实现了极高的消息处理能力,可以支持每秒处理数百万条消息。
    • 分布式系统:Kafka是一个分布式系统,可以水平扩展来处理更多的消息和数据。同时,Kafka还提供了容错和可靠性机制,确保数据的可靠性和安全性。
    • 实时性:Kafka支持实时数据流处理,可以在数据产生后立即进行处理和分析,满足实时业务需求。
    • 多订阅者模式:Kafka支持多个消费者同时订阅同一个Topic,实现数据的共享和复用。同时,Kafka还支持消费者组的概念,可以将多个消费者组织在一起共同消费数据,提高数据的处理能力。

运行环境检测

JAVA版本及安装路径环境及检测命令

C:\Users\HW>java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)

C:\Users\HW>where java
C:\Program Files (x86)\Common Files\Oracle\Java\javapath\java.exe
E:\JDK\jdk1.8.0_212\bin\java.exe
E:\JDK\jdk1.8.0_212\jre\bin\java.exe

 单节点部署单broker的部署模式

创建一个含3个分区的主题topic1,创建一个生产者来发送信息,创建一个消费者接收所有来自topic1主题的消息,创建成功后要求通过生产者发送消息:

检查端口占用情况

netstat -ano | findstr :端口号

启动ZooKeeper服务

bin\windows\zookeeper-server-start.bat config\zookeeper.properties

如果端口无法绑定,则对zookeeper/server.properties修改相应端口

 启动Kafka broker服务

bin\windows\kafka-server-start.bat config\server.properties

 创建一个主题

bin\windows\kafka-topics.bat --create --topic topic1 --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1

出现Created topic topic1.则成功!

运行以下命令来列出所有主题

bin\windows\kafka-topics.bat --list --bootstrap-server localhost:9092

查看topic1主题信息

bin\windows\kafka-topics.bat --describe --topic topic1 --bootstrap-server localhost:9092

 把消息写入主题(生产者)

bin\windows\kafka-console-producer.bat --topic topic1 --bootstrap-server localhost:9092

读取消息(消费者)

bin\windows\kafka-console-consumer.bat --topic topic1 --from-beginning --bootstrap-server localhost:9092

单节点部署多个broker

统一的Zookeeper服务器:(172.17.61.100:2181)的主题topic_bigdata进行消息的交换(topic_bigdata主题由教师机创建)

修改server.properties文件,添加zookeeper.connect=172.17.61.100:2181:2181配置,然后执行生产者,消费者。

多节点部署多个broker

电脑上设计含有两个broker的Kafka集群(broker.id分别设置为0和1,端口号分别是9091和9092)。在自己的电脑上设计一个基于Kafka的控制台信息交换系统,要求创建一个含3个分区2个拷贝的主题topic_bigdata,创建一个生产者来发送你自己的信息,创建一个消费者接收所有来自topic_bigdata主题的消息。

1、创建两个配置文件server1.properties和server2.properties(两个文件由server.properties复制得到)

2、第一个broker的配置(server1.properties

broker.id=0

listeners=PLAINTEXT://:9092

log.dirs=/tmp/kafka/logs-0

3、第二个broker的配置(server2.properties

broker.id=1

listeners=PLAINTEXT://:9093

log.dirs=/tmp/kafka/logs-1

4、启动ZooKeeper

bin\windows\zookeeper-server-start.bat config\zookeeper.properties

5、Broker 1启动命令

bin\windows\kafka-server-start.bat config\server1.properties

6、Broker 2启动命令

bin\windows\kafka-server-start.bat config\server2.properties

7、主题创建命令

bin\windows\kafka-topics.bat --create --topic topic2 --bootstrap-server localhost:9092,localhost:9093 --partitions 3 --replication-factor 2

8、查看主题信息

bin\windows\kafka-topics.bat --describe --topic topic2 --bootstrap-server localhost:9092

9、生产者创建命令

第一个broker
bin\windows\kafka-console-producer.bat --topic topic2 --bootstrap-server localhost:9092
第二个broker
bin\windows\kafka-console-producer.bat --topic topic2 --bootstrap-server localhost:9093

10、消费者

第一个broker
bin\windows\kafka-console-consumer.bat --topic topic2 --from-beginning --bootstrap-server localhost:9092
第二个broker
bin\windows\kafka-console-consumer.bat --topic topic2 --from-beginning --bootstrap-server localhost:9093

 tmp里面的kafka

 logs-0和logs-1里面

 


Flume

Apache Flume 是一个分布式的、可靠的、高可用的系统,用于有效地收集、聚合和移动大量日志数据。它非常适用于日志数据从各种源头(如服务器、应用)向集中存储系统(如HDFS)的传输。Flume的核心设计理念是简单而灵活,便于用户定制以满足不同的数据采集需求。

Flume系统中核心的角色是agent,agent本身是一个Java进程,一般运行在日志收集节点。一个agent内部有三个组件:

  • Source:采集源,用于跟数据源对接,以获取数据;
  • Channel:agent内部的数据传输通道,用于从source将数据传递到sink;
  • Sink:下沉地,采集数据的传送目的,用于往下一级agent传递数据或者往最终存储系统传递数据

在整个数据的传输的过程中,流动的是event,它是Flume内部数据传输的最基本单元。

通过flume-ng version检查是否成功安装flume。

如果出现JAVA环境变量有关的错误:

我的Java安装目录:

系统JAVA_HOME

flume-ng.ps1里面关于JAVA环境变量的内容:

此时的JAVA_HOME=E:\JDK\jdk1.8.0_212,而java.exe在E:\JDK\jdk1.8.0_212\bin\java.exe

安装telnet

 netcat数据采集

采集netcat数据显示到控制台

在flume下的conf里面创建一个conf配置文件,配置内容:

# 设置Agent上的各个组件名称
a1.sources = r1
a1.sinks = k1
a1.channels = c1
 
# 配置Source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
 
# 配置Sink
a1.sinks.k1.type = logger 

# 配置Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
 
# 把Source和Sink绑定到Channel上
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
.\bin\flume-ng agent --conf .\conf --conf-file .\conf\example.conf --name a1 -property flume.root.logger=INFO,console

telnet localhost 44444连接,输出flume,会采集到。

实现对telnet数据的采集并保存到文件中去。

配置内容如下:

# 设置Agent上的各个组件名称
a1.sources = r1
a1.sinks = k1
a1.channels = c1
 
# 配置Source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
# 配置Sink
a1.sinks.k1.type = file_roll
a1.sinks.k1.sink.directory = E:\\flume-1.9.0\\flumelogs
a1.sinks.k1.sink.rollInterval = 0 
a1.sinks.k1.sink.file.name.timeFormat = yyyyMMddHH
# 配置Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
 
# 把Source和Sink绑定到Channel上
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
.\bin\flume-ng agent --conf .\conf --conf-file .\conf\example.conf --name a1 -property flume.root.logger=INFO,console

telnet localhost 44444

会在E:\flume-1.9.0\flumelogs目录下生成一个文件,里面就是采集的内容。

Spooling Directory Source的日志采集

提前在E:\apache-flume-1.9.0-bin创建logdir\example.log,编写一点内容。

配置内容:

#配置Agent上的各个组件名称
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# 配置source
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = E:\\flume-1.9.0\\logdir
# a1.sources.r1.fileHeader = true
# a1.sources.r1.interceptors = i1
# a1.sources.r1.interceptors.i1.type = timestamp

# 配置sink
a1.sinks.k1.type = logger
a3.sinks.sinkFile.sink.directory = E:\flume-1.9.0\out

# 配置 channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# 绑定source,channel,sink
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
.\bin\flume-ng agent --conf .\conf --conf-file .\conf\exampledir.conf --name a1 -property flume.root.logger=INFO,console

当启动后,会把example.log里面的内容显示出来:

基于Avro多Agent分布式日志采集

配置两个Agent实现下面的要求:

Agent1:采集telnet的信息,并已avro的格式将信息sink到Agent2;

Agent2: 将Agent1发过来的信息显示到控制台上;

Agent1的启动命令行、配置文件:

 .\bin\flume-ng agent --conf .\conf --conf-file .\conf\agent2first.conf --name a1
# 设置Agent1上采集telnet数据
a1.sources = r1
a1.sinks = k1
a1.channels = c1
 
# 配置Source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
 
# 配置Sink
a1.sinks.k1.type =  avro
a1.sinks.k1.channel = c1
#实际应用为目标机制地址不能是localhost或127.0.0.1
a1.sinks.k1.hostname = localhost
#目标机器的端口号
a1.sinks.k1.port = 55555 
a1.sinks.k1.batch-size = 1


# 配置Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
 
# 把Source和Sink绑定到Channel上
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

Agent2的启动命令行、配置文件:

.\bin\flume-ng agent --conf .\conf --conf-file .\conf\agent2two.conf --name a1 -property flume.root.logger=INFO,console
# 设置Agent2上的各个组件名称
a1.sources = r1
a1.sinks = k1
a1.channels = c1
 
# 配置Source
#source中的avro组件是一个接收者服务
a1.sources.r1.type = avro
a1.sources.r1.channels = c1

#当前集群IP,必须是ip地址
a1.sources.r1.bind = 127.0.0.1
a1.sources.r1.port = 55555

 
# 配置Sink
a1.sinks.k1.type = logger 

# 配置Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
 
# 把Source和Sink绑定到Channel上
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

Telnet localhost 44444

agent2里面会出现采集的内容

 Flume和Kafka的组合使用

设计并实现一个分布式实验系统。Telnent数据作为数据源,Flume采集Telnet的数据,并将数据发送到Kafak系统中的test_topic主题中,通过Kafka的consumer查看收到的数据。

启动zookeeper

.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.Properties

启动Kafka服务

.\bin\windows\kafka-server-start.bat .\config\server.properties

创建主题test_test

.\bin\windows\kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test_test

在Flume的conf文件夹下创建配置文件kafka.conf,内容如下:

# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
 
# source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444

# sink
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.kafka.topic = test_test
a1.sinks.k1.kafka.bootstrap.servers = localhost:9092
a1.sinks.k1.kafka.flumeBatchSize = 20
a1.sinks.k1.kafka.producer.acks = 1
a1.sinks.k1.kafka.producer.linger.ms = 1
a1.sinks.k1.kafka.producer.compression.type = snappy
 
# channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
 
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

启动Flume

.\bin\flume-ng.cmd agent --conf ./conf --conf-file ./conf/kafka.conf --name a1 -property flume.root.logger=INFO,console

启动Telnet

telnet localhost 44444

打开kafka的consumer查看接收的信息

.\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test_test --from-beginning

Kettle

Kettle 是一个开源的、功能强大的数据集成工具,由 Pentaho 社区提供。它被设计用于数据抽取、转换(ETL)和加载(ETL过程的最后阶段),并且支持多种数据源和格式,包括但不限于关系型数据库、平面文件、Hadoop 分布式文件系统(HDFS)、NoSQL 数据库等。

Kettle 的主要特点包括:

  1. 可视化开发环境:Kettle 提供了一个图形用户界面,用户可以通过拖放组件和设置属性的方式构建数据管道。

  2. 灵活性:Kettle 支持多种数据转换操作,如排序、过滤、聚合、联接等,以及自定义脚本和复杂的转换逻辑。

  3. 扩展性:Kettle 允许用户通过插件扩展其功能,以支持更多的数据源和数据处理操作。

  4. 跨平台:作为一个 Java 编写的应用程序,Kettle 可以在任何支持 Java 的平台上运行。

  5. 社区支持:作为开源软件,Kettle 拥有活跃的社区,用户可以从社区获得帮助和资源。

  6. 企业级功能:尽管 Kettle 是免费的,但它提供了许多企业级的功能,如作业和转换的调度、日志记录、错误处理等。

  7. 集成能力:Kettle 可以与其他 Pentaho 工具(如 Pentaho Business Analytics)集成,提供端到端的业务智能解决方案。

Kettle 适合数据分析师、数据库管理员和开发者使用,帮助他们处理和集成大量数据。

点击spoon.bat启动时候,如果出现找不到javaw.exe,就进入spoon.bat调整javaw.exe

java的相关环境同上,此时的JAVA_HOME=E:\JDK\jdk1.8.0_212,而javaw.exe在E:\JDK\jdk1.8.0_212\bin\javaw.exe

进入后,新建一个转换,

把内容添加后要注意设置分隔符,

如果出现字符乱码,调整字符格式即可。

去除空值

写入数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值