优化阅读格式

This commit is contained in:
heibaiying
2019-07-31 17:18:07 +08:00
parent ceb868fe13
commit ca7c99802b
91 changed files with 4059 additions and 4058 deletions

View File

@ -9,12 +9,12 @@
## 一、整合说明
Storm官方对Kafka的整合分为两个版本官方说明文档分别如下
Storm 官方对 Kafka 的整合分为两个版本,官方说明文档分别如下:
+ [Storm Kafka Integration](http://storm.apache.org/releases/2.0.0-SNAPSHOT/storm-kafka.html) : 主要是针对0.8.x版本的Kafka提供整合支持
+ [Storm Kafka Integration (0.10.x+)]() : 包含Kafka 新版本的 consumer API主要对Kafka 0.10.x +提供整合支持。
+ [Storm Kafka Integration](http://storm.apache.org/releases/2.0.0-SNAPSHOT/storm-kafka.html) : 主要是针对 0.8.x 版本的 Kafka 提供整合支持;
+ [Storm Kafka Integration (0.10.x+)]() : 包含 Kafka 新版本的 consumer API主要对 Kafka 0.10.x + 提供整合支持。
这里我服务端安装的Kafka版本为2.2.0(Released Mar 22, 2019) 按照官方0.10.x+的整合文档进行整合不适用于0.8.x版本的Kafka。
这里我服务端安装的 Kafka 版本为 2.2.0(Released Mar 22, 2019) ,按照官方 0.10.x+ 的整合文档进行整合,不适用于 0.8.x 版本的 Kafka。
## 二、写入数据到Kafka
@ -111,7 +111,7 @@ Hadoop Spark HBase Storm
```java
/**
* 写入数据到Kafka中
* 写入数据到 Kafka
*/
public class WritingToKafkaApp {
@ -123,11 +123,11 @@ public class WritingToKafkaApp {
TopologyBuilder builder = new TopologyBuilder();
// 定义Kafka生产者属性
// 定义 Kafka 生产者属性
Properties props = new Properties();
/*
* 指定broker的地址清单清单里不需要包含所有的broker地址生产者会从给定的broker里查找其他broker的信息。
* 不过建议至少要提供两个broker的信息作为容错。
* 指定 broker 的地址清单,清单里不需要包含所有的 broker 地址,生产者会从给定的 broker 里查找其他 broker 的信息。
* 不过建议至少要提供两个 broker 的信息作为容错。
*/
props.put("bootstrap.servers", BOOTSTRAP_SERVERS);
/*
@ -166,11 +166,11 @@ public class WritingToKafkaApp {
### 2.5 测试准备工作
进行测试前需要启动Kakfa
进行测试前需要启动 Kakfa
#### 1. 启动Kakfa
Kafka的运行依赖于zookeeper需要预先启动可以启动Kafka内置的zookeeper,也可以启动自己安装的:
Kafka 的运行依赖于 zookeeper需要预先启动可以启动 Kafka 内置的 zookeeper,也可以启动自己安装的:
```shell
# zookeeper启动命令
@ -180,7 +180,7 @@ bin/zkServer.sh start
bin/zookeeper-server-start.sh config/zookeeper.properties
```
启动单节点kafka用于测试
启动单节点 kafka 用于测试:
```shell
# bin/kafka-server-start.sh config/server.properties
@ -206,7 +206,7 @@ bin/kafka-topics.sh --create --bootstrap-server hadoop001:9092 --replication-fac
### 2.6 测试
可以用直接使用本地模式运行,也可以打包后提交到服务器集群运行。本仓库提供的源码默认采用`maven-shade-plugin`进行打包,打包命令如下:
可以用直接使用本地模式运行,也可以打包后提交到服务器集群运行。本仓库提供的源码默认采用 `maven-shade-plugin` 进行打包,打包命令如下:
```shell
# mvn clean package -D maven.test.skip=true
@ -228,7 +228,7 @@ bin/kafka-topics.sh --create --bootstrap-server hadoop001:9092 --replication-fac
```java
/**
* 从Kafka中读取数据
* 从 Kafka 中读取数据
*/
public class ReadingFromKafkaApp {
@ -241,7 +241,7 @@ public class ReadingFromKafkaApp {
builder.setSpout("kafka_spout", new KafkaSpout<>(getKafkaSpoutConfig(BOOTSTRAP_SERVERS, TOPIC_NAME)), 1);
builder.setBolt("bolt", new LogConsoleBolt()).shuffleGrouping("kafka_spout");
// 如果外部传参cluster则代表线上环境启动,否则代表本地启动
// 如果外部传参 cluster 则代表线上环境启动,否则代表本地启动
if (args.length > 0 && args[0].equals("cluster")) {
try {
StormSubmitter.submitTopology("ClusterReadingFromKafkaApp", new Config(), builder.createTopology());
@ -257,11 +257,11 @@ public class ReadingFromKafkaApp {
private static KafkaSpoutConfig<String, String> getKafkaSpoutConfig(String bootstrapServers, String topic) {
return KafkaSpoutConfig.builder(bootstrapServers, topic)
// 除了分组ID,以下配置都是可选的。分组ID必须指定,否则会抛出InvalidGroupIdException异常
// 除了分组 ID,以下配置都是可选的。分组 ID 必须指定,否则会抛出 InvalidGroupIdException 异常
.setProp(ConsumerConfig.GROUP_ID_CONFIG, "kafkaSpoutTestGroup")
// 定义重试策略
.setRetry(getRetryService())
// 定时提交偏移量的时间间隔,默认是15s
// 定时提交偏移量的时间间隔,默认是 15s
.setOffsetCommitPeriodMs(10_000)
.build();
}
@ -279,7 +279,7 @@ public class ReadingFromKafkaApp {
```java
/**
* 打印从Kafka中获取的数据
* 打印从 Kafka 中获取的数据
*/
public class LogConsoleBolt extends BaseRichBolt {
@ -294,7 +294,7 @@ public class LogConsoleBolt extends BaseRichBolt {
try {
String value = input.getStringByField("value");
System.out.println("received from kafka : "+ value);
// 必须ack,否则会重复消费kafka中的消息
// 必须 ack,否则会重复消费 kafka 中的消息
collector.ack(input);
}catch (Exception e){
e.printStackTrace();
@ -309,11 +309,11 @@ public class LogConsoleBolt extends BaseRichBolt {
}
```
这里从`value`字段中获取kafka输出的值数据。
这里从 `value` 字段中获取 kafka 输出的值数据。
在开发中,我们可以通过继承`RecordTranslator`接口定义了KafkaRecord与输出流之间的映射关系可以在构建`KafkaSpoutConfig`的时候通过构造器或者`setRecordTranslator()`方法传入,并最后传递给具体的`KafkaSpout`
在开发中,我们可以通过继承 `RecordTranslator` 接口定义了 KafkaRecord 与输出流之间的映射关系,可以在构建 `KafkaSpoutConfig` 的时候通过构造器或者 `setRecordTranslator()` 方法传入,并最后传递给具体的 `KafkaSpout`
默认情况下使用内置的`DefaultRecordTranslator`,其源码如下,`FIELDS`中 定义了tuple中所有可用的字段主题分区偏移量消息键值。
默认情况下使用内置的 `DefaultRecordTranslator`,其源码如下,`FIELDS` 中 定义了 tuple 中所有可用的字段:主题,分区,偏移量,消息键,值。
```java
public class DefaultRecordTranslator<K, V> implements RecordTranslator<K, V> {
@ -350,7 +350,7 @@ public class DefaultRecordTranslator<K, V> implements RecordTranslator<K, V> {
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/storm-kafka-producer.png"/> </div>
本地运行的项目接收到从Kafka发送过来的数据
本地运行的项目接收到从 Kafka 发送过来的数据:
<div align="center"> <img src="https://github.com/heibaiying/BigData-Notes/blob/master/pictures/storm-kafka-receiver.png"/> </div>