大数据学习之Kafka消息队列、Spark分布式计算框架一

Kafka消息队列

章节一.kafka入门

4.kafka入门_消息队列两种模式

5.kafka入门_架构相关名词

Kafka 入门 _ 架构相关名词
事件 记录了世界或您的业务中 " 发生了某事 " 的事实。在文档中
也称为记录或消息。当您向 Kafka 读取或写入数据时,您以事件的
形式执行此操作。从概念上讲,事件具有键、值、时间戳和可选的
元数据标头。这是一个示例事件:
事件键: " 白富美 "
事件的值: " 向土豪 支付了 520 元 "
事件时间戳: "yyyy 年 05 月 20 日 13:14"
生产者 是那些向 Kafka 发布(写入)事件的客户端应用程序。
消费者 是订阅(读取和处理)这些事件的那些客户端应用程
序。在 Kafka 中,生产者和消费者完全解耦并且彼此不可知,这是
实现 Kafka 众所周知的高可扩展性的关键设计元素。例如,生产者
永远不需要等待消费者。 Kafka 提供了各种 保证 ,例如一次性处理
事件的能力。
主题 :事件被组织并持久地存储在 主题 中。 Kafka 中的主题始
终是多生产者和多订阅者:一个主题可以 N(N>=0) 个向其写入事件
的生产者,以及订阅这些事件的 N(N>=0) 个消费者。主题中的事件
可以根据需要随时读取 ------ 与传统的消息传递系统不同,事件在消
费后不会被删除。相反,您可以通过每个主题的配置设置来定义
Kafka 应该将您的事件保留多长时间,之后旧事件将被丢弃。 Kafka
的性能在数据大小方面实际上是恒定的,因此长时间存储数据是非
常好的

6.kafka入门_基础架构

7.kafka入门_下载安装一

8.kafka入门_下载安装二

9.kafka入门_集群启停脚本

Kafka 入门 _ 集群启停脚本

root@node2 opt\] # vim /etc/profile # kafka 的环境变量 export KAFKA_HOME = /opt/kafka export PATH = $PATH : $KAFKA_HOME /bin \[root@node2 opt\] # source /etc/profile \[root@node2 \~\] # kafka-topics.sh --version 3 .0.1 (Commit:8e30984f43e64d8b) kafka-server-start.sh -daemon /opt/kafka/config/server.properties \[root@node2 opt\] # jps 3248 QuorumPeerMain 3761 Jps 3736 Kafka kafka-server-stop.sh \[root@node2 opt\] # cd /root/ 11 \[root@node2 \~\] # mkdir bin/ \[root@node2 \~\] # cd bin/ \[root@node2 bin\] # vim kafka.sh #!/bin/bash if \[ $# -lt 1

then
echo "Please input arg:[start/stop]"
exit
fi
case 1 in start ) for i in node2 node3 node4 do echo "--------start i 's kafka--------"
ssh i /opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties done ;; stop ) for i in node2 node3 node4 do echo "--------stop i 's kafka--------"
ssh $i /opt/kafka/bin/kafka-server-stop.sh
done
;;
*)
echo "Arg Error ! Please input arg:

start/stop\]" exit ;; esac **参数 值 描述** --bootstrap-server node3:9092 连接的 Kafka Broker 主机名称和端口号 --topic \ 比如: topicA 操作的 topic 名称 --list 查看所有主题 --create 创建主题 --delete 删除主题 --alter 修改主题 --describe 查看主题详细描述 --partitions \ 设置分区数 --replication-factor \ 设置分区副本 --config \ 更新系统默认的配置 --version 查看当前系统 kafka 的版本 添加可执行权限: \[root@node2 bin\]# chmod +x kafka.sh 启动测试: kafka.sh start 注意:提前启动 zk 集群。 关闭测试: kafka.sh stop ![](https://i-blog.csdnimg.cn/direct/4be7d085d0b14ab5bfc46a05b7676a9d.png) ![](https://i-blog.csdnimg.cn/direct/4524b80665324d2a85eb15167a482bc8.png) ![](https://i-blog.csdnimg.cn/direct/0d3edc383d8746529bf067134b884360.png) ### 10.kafka入门_Topic命令行操作 ![](https://i-blog.csdnimg.cn/direct/e79b230047e04c41b893f9231d0d9c14.png) ![](https://i-blog.csdnimg.cn/direct/833b3406ed6643d3bb370a8e618f1c6a.png) ### 11.kafka入门_消息发送和接收 ![](https://i-blog.csdnimg.cn/direct/e3e6877917464770beb5f977f8b62d4f.png) ![](https://i-blog.csdnimg.cn/direct/b4a4453088ee4e8ca6972447a5b08517.png) ### 章节二.生产者 ### 12.生产者_发送数据原理剖析一 ![](https://i-blog.csdnimg.cn/direct/95bedecd882340e4a06ad7a7b7fe0e72.png) ### 13.生产者_发送数据原理剖析二 ![](https://i-blog.csdnimg.cn/direct/adb5a2a3c52747c4bdbd7445e4052f09.png) ### 14.生产者_同步发送数据一 ![](https://i-blog.csdnimg.cn/direct/f3993b33eff0402f8d7a6168d285d2fe.png) ### ![](https://i-blog.csdnimg.cn/direct/45f5bd92f5314d4892e4b401632484a8.png) ### 15.生产者_同步发送数据二 ![](https://i-blog.csdnimg.cn/direct/96c4609c4337470492da68cc3719879b.png) ### ![](https://i-blog.csdnimg.cn/direct/6506092dcdf246fbb66f2d43ab750a58.png) 在 node2 上开启 Kafka 消费者进行消费 7 运行 SyncCustomProducer 类 prop . put ( ProducerConfig . KEY_SERIALIZER_CL ASS_CONFIG , StringSerializer . class . getName ()); prop . put ( ProducerConfig . VALUE_SERIALIZER_ CLASS_CONFIG , StringSerializer . class . getName ()); //TODO 3. 声明并实例化生产者对象 KafkaProducer \< String , String \> producer = new KafkaProducer \< String , String \> ( prop ); //TODO 4. 发送消息 for ( int i = 0 ; i \< 5 ; i ++ ){ // 同步发送消息 producer . send ( new ProducerRecord \<\> ( "topicA" , "sync_msg" + i )). get (); } //TODO 5. 关闭生产者 producer . close (); } } \[root@node2 \~\] # kafka-console-consumer.sh --bootstrap-server node2:9092 --topic topicA 22 8 观察 node2 上 Kafka 消费者消费消息的情况 **生产者** **_** **异步发送数据** 代码实现 1 创建类 UnSyncCustomProducer 2 编写代码 \[root@node2 \~\]# kafka-console-consumer.sh --bootstrap-server node2:9092 --topic topicA sync_msg0 sync_msg1 sync_msg2 sync_msg3 sync_msg4 ### 16.生产者_异步发送数据 ![](https://i-blog.csdnimg.cn/direct/56447ecc47d24f798cba595cd7f4cae2.png) ### 17.生产者_异步回调发送数据 ![](https://i-blog.csdnimg.cn/direct/71fda26dd8244762acae0325887b4ccf.png) 代码实现 1 创建类 UnSyncCallBackCustomProducer 2 编写代码 \[root@node2 \~\] # kafka-console-consumer.sh --bootstrap-server node2:9092 --topic topicA unsync_msg0 unsync_msg1 unsync_msg2 unsync_msg3 unsync_msg4 package com . itbaizhan . kafka . producer ; 26 import org . apache . kafka . clients . producer . \* ; import org . apache . kafka . common . serialization . Stri ngSerializer ; import java . util . Properties ; import java . util . concurrent . ExecutionException ; public class UnSyncCallBackCustomProducer { public static void main ( String \[\] args ) throws ExecutionException , InterruptedException { //TODO 1. 声明并实例化 Kafka Producer 的 配置文件对象 Properties prop = new Properties (); //TODO 2. 为配置文件对象设置参数 // 2.1 配置 bootstrap_servers prop . put ( ProducerConfig . BOOTSTRAP_SERVERS _CONFIG , "node2:9092,node3:9092,node4:9092" ); // 2.2 配置 key 和 value 的序列化类 prop . put ( ProducerConfig . KEY_SERIALIZER_CL ASS_CONFIG , StringSerializer . class . getName ()); 27 prop . put ( ProducerConfig . VALUE_SERIALIZER_ CLASS_CONFIG , StringSerializer . class . getName ()); //TODO 3. 声明并实例化生产者对象 KafkaProducer \< String , String \> producer = new KafkaProducer \< String , String \> ( prop ); //TODO 4. 发送消息 for ( int i = 0 ; i \< 5 ; i ++ ){ // 异步发送消息 不调用 get() 方法 producer . send ( new ProducerRecord \<\> ( "topicA" , "unsync_msg" + i ), new Callback () { // 如下方法在生产者收到 acks 确认时异步调用 @Override public void onCompletion ( RecordMetadata recordMetadata , Exception e ) { if ( e == null ){ // 无异常信息,输 出主题和分区信息到控制台 System . out . println ( "topic:" + recordMetadat a . topic () + ",partition:" + recordMetadata . partition () ); } else { // 打印异常信息 28 3 在 node2 上开启 Kafka 消费者进行消费 4 运行 UnSyncCallBackCustomProducer 类 5 观察 node2 上 Kafka 消费者消费消息的情况 6 控制台输出信息 System . out . println ( e . getMessage ()); } } }); Thread . sleep ( 5 ); } //TODO 5. 关闭生产者 producer . close (); } } \[root@node2 \~\] # kafka-console-consumer.sh --bootstrap-server node2:9092 --topic topicA \[root@node2 \~\] # kafka-console-consumer.sh --bootstrap-server node2:9092 --topic topicA unsync_msg0 unsync_msg1 unsync_msg2 unsync_msg3 unsync_msg4 29 **生产者** **_** **拦截器** 拦截器 (Interceptor) 是 kafka0.10.0.0 版本中引入的新功能,主 要用于实现 clients 端的定制化控制逻辑。它可以使得用户在消息发 送前以及 producer 回调逻辑前有机会对消息做一些定制化需求,比 如修改消息等。同时允许指定多个 Interceptor 按序作用于同一条消 息从而形成一个拦截器链( Interceptor Chain )。 自定义拦截器需要实现 org.apache.kafka.clients.producer.ProducerInterceptor 接口。 topic:topicA,partition:1 topic:topicA,partition:1 topic:topicA,partition:0 topic:topicA,partition:0 topic:topicA,partition:0 ### 18.生产者_拦截器 ![](https://i-blog.csdnimg.cn/direct/7db74c2f46514c52ad7d0ff686c29939.png) ### ![](https://i-blog.csdnimg.cn/direct/cb4d846f8e464fd5a91d21c77d9feaaf.png) ### 19.生产者_拦截器二 ![](https://i-blog.csdnimg.cn/direct/b99a9d9a3ca24ad6a20f5aa23b306579.png) ### ![](https://i-blog.csdnimg.cn/direct/c6129428df344ed393665ebc27099d44.png) ### ![](https://i-blog.csdnimg.cn/direct/deb135a7ee134da897cbcad907c7b411.png) ### 20.生产者_消息序列化一 ![](https://i-blog.csdnimg.cn/direct/8209176d6b73487a9bb31284a4ca41b7.png) ### ![](https://i-blog.csdnimg.cn/direct/b707089fcaf843e8a1fb5bcd159a15d6.png) ### ![](https://i-blog.csdnimg.cn/direct/92352057091e48819df392fd1f0e2c44.png) ### 21.生产者_消息序列化二 添加依赖 } public void setName ( String name ) { this . name = name ; } public int getAge () { return age ; } public void setAge ( int age ) { this . age = age ; } public String getAddress () { return address ; } public void setAddress ( String address ) { this . address = address ; } } 39 3 编写自定义序列化类 \ \ org.codehaus.jackson \ \ jackson-mapper asl \ \ 1.9.13 \ \ package com . itbaizhan . kafka . producer ; import org . apache . kafka . common . serialization . Seri alizer ; import org . codehaus . jackson . map . ObjectMapper ; import java . io . IOException ; import java . nio . charset . StandardCharsets ; import java . util . Map ; public class UserSerializer implements Serializer \< UserVo \> { private ObjectMapper objectMapper ; @Override public void configure ( Map \< String , ?\> configs , boolean isKey ) { objectMapper = new ObjectMapper (); //Serializer.super.configure(configs, isKey); } 40 4 编写生产者程序 @Override public byte \[\] serialize ( String topic , UserVo data ) { byte \[\] ret = null ; try { ret = objectMapper . writeValueAsString ( data ) . getBytes ( StandardCharsets . UTF_8 ); } catch ( IOException e ) { throw new SerializationException ( "Error when serializing UserVo to byte\[\],exception is " + e . getMessage ()); } return ret ; } @Override public void close () { objectMapper = null ; //Serializer.super.close(); } } package com . itbaizhan . kafka . producer ; import org . apache . kafka . clients . producer . \* ; 41 import org . apache . kafka . common . serialization . Stri ngSerializer ; import java . util . Properties ; import java . util . concurrent . ExecutionException ; public class UserSerProducer { public static void main ( String \[\] args ) throws ExecutionException , InterruptedException { //TODO 1. 声明并实例化 Kafka Producer 的 配置文件对象 Properties prop = new Properties (); //TODO 2. 为配置文件对象设置参数 // 2.1 配置 bootstrap_servers prop . put ( ProducerConfig . BOOTSTRAP_SERVERS _CONFIG , "node2:9092,node3:9092,node4:9092" ); // 2.2 配置 key 和 value 的序列化类 prop . put ( ProducerConfig . KEY_SERIALIZER_CL ASS_CONFIG , StringSerializer . class . getName ()); prop . put ( ProducerConfig . VALUE_SERIALIZER_ CLASS_CONFIG , UserSerializer . class . getName ()); 42 //TODO 3. 声明并实例化生产者对象 注意 value 的泛型类型 KafkaProducer \< String , UserVo \> producer = new KafkaProducer \< String , UserVo \> ( prop ); //TODO 4. 发送消息 UserVo userVo = new UserVo ( "tuhao" , 18 , " 北京 " ); producer . send ( new ProducerRecord \< String , UserVo \> ( "topicA" , userVo ), new Callback () { // 如下方法在生产者收到 acks 确认 时异步调用 @Override public void onCompletion ( RecordMetadata recordMetadata , Exception e ) { if ( e == null ){ // 无异常信息,输出主题 和分区信息到控制台 System . out . println ( "topic:" + recordMetadat a . topic () + ",partition:" + recordMetadata . partition () ); } else { // 打印异常信息 System . out . println ( e . getMessage ()); } } 43 5 在 node2 上开启 Kafka 消费者进行消费 6 运行 UserSerProducer 类 7 观察 node2 上 Kafka 消费者消费消息的情况 **实时效果反馈** **1.** **关于** **Kafka** **生产者消息序列化的描述,正确的是:** A 默认提供了序列化类,如 BytesSerializer 、 IntegerSerializer 、 StringSerializer 等。 B 自定义序列化类需要实现 org.apache.kafka.common.serialization.Serializer 。 C 生产者序列化机制使用起来比较简单,需要在构造 producer 对象之前指定参数 key.serializer 和 value.serializer 。 }); Thread . sleep ( 50 ); //TODO 5. 关闭生产者 producer . close (); } } ![](https://i-blog.csdnimg.cn/direct/20b290fc24df483895337d7020833f00.png) ### 22.生产者_分区的优势 ![](https://i-blog.csdnimg.cn/direct/22369620c1064b62b16a37a7d8205933.png) ![](https://i-blog.csdnimg.cn/direct/749c5c1890e4478093b3f75306cd563f.png) ### 23.生产者_分区策略 ![](https://i-blog.csdnimg.cn/direct/5789c0ab8eb449b194294e2b694080f6.png) ![](https://i-blog.csdnimg.cn/direct/470fe6c1af464c02abc6a746454592aa.png) ### 24.生产者_分区实战一 ![](https://i-blog.csdnimg.cn/direct/ec6db4e1f8fa4d9996a3b9b6fda2e967.png) ![](https://i-blog.csdnimg.cn/direct/82c7e47cc21a44bfbb63cccb7371387e.png) ### 25.生产者_分区实战二 ![](https://i-blog.csdnimg.cn/direct/e4d758861e7441aeb55889ebc1963a14.png) ![](https://i-blog.csdnimg.cn/direct/8ecd86a646e64ed98c7ac21eb16d3f64.png) ### 26.生产者_自定义分区机制一 ![](https://i-blog.csdnimg.cn/direct/66e81198997f4d54aaeec2e7ac6cccb0.png) ![](https://i-blog.csdnimg.cn/direct/13599b550e784f2bbf8df4b1bca1405f.png) ![](https://i-blog.csdnimg.cn/direct/607470ee3bfb4080b705da678da15601.png) ![](https://i-blog.csdnimg.cn/direct/aceb566b01b44ecaac2d3dc6bf0cf0d8.png) ### 27.生产者_自定义分区机制二 ![](https://i-blog.csdnimg.cn/direct/1d42d903ca86423a9f8ff46d715a006c.png) ![](https://i-blog.csdnimg.cn/direct/39295949ba96481c9b90e592bdc2216e.png) ### 28.生产者_消息无丢失 ![](https://i-blog.csdnimg.cn/direct/b7ec80d70ac54f3eb50a93de642d703b.png) ### ![](https://i-blog.csdnimg.cn/direct/827373bf7620411a9637324923e22f8a.png) ### ![](https://i-blog.csdnimg.cn/direct/7e73c73e499c4531a10f1d486a660d99.png) ### 29.生产者_数据去重 ![](https://i-blog.csdnimg.cn/direct/285fae95817d44b08ccde6445d847147.png) ### 30.生产者_数据去重_幂等性 ![](https://i-blog.csdnimg.cn/direct/38bedf12b6a1476a9868cb5b703c6cc7.png) ![](https://i-blog.csdnimg.cn/direct/ff967892864b425d9b0d4e2fb0ba532f.png) ### 31.生产者_数据去重_事务原理分析 ![](https://i-blog.csdnimg.cn/direct/acb14b73bb8b48328c0eeaa07e4912f5.png) ![](https://i-blog.csdnimg.cn/direct/6a5ec88cb2da41e397148c23d36b0e02.png) ### 32.生产者_数据去重_事务代码实现 ![](https://i-blog.csdnimg.cn/direct/b3c67781c7024bbb81b2221a068f53b8.png) ### ![](https://i-blog.csdnimg.cn/direct/a2b8b2c80a804dea8ad77eafcb7041ba.png) ### ![](https://i-blog.csdnimg.cn/direct/aab62df13e264ac1b872ad0a69ddd851.png) ### 章节三.BROKER ### 33.BROKER_ZOOKEEPER存储信息 ![](https://i-blog.csdnimg.cn/direct/7d4f10c2843542e39e4e10b0070bc3a4.png) ### ![](https://i-blog.csdnimg.cn/direct/c546d8984d6a4b6e84dcc0e6c0f0198e.png) ### 34.BROKER_工作流程 ![](https://i-blog.csdnimg.cn/direct/7fc6dd4305ee4a4bae06d3b5acc3784d.png) ![](https://i-blog.csdnimg.cn/direct/1d446a015ff54ffb80e2b931c6b782cc.png) ![](https://i-blog.csdnimg.cn/direct/7e54040aa57b4a78a6c1a54c03121f51.png) ### 35.BROKER_服役新节点 ![](https://i-blog.csdnimg.cn/direct/4b395f31d71d4b01b9557bc9a4f59ccc.png) ![](https://i-blog.csdnimg.cn/direct/6dd6dadbd0094faa80c4088e4a9c8e58.png) ![](https://i-blog.csdnimg.cn/direct/9d796f10ef284af580dab93fb1b71b44.png) ### 36.BROKER_退役节点 ![](https://i-blog.csdnimg.cn/direct/475a434d0b6c4da18e423ca9120587d0.png) ![](https://i-blog.csdnimg.cn/direct/26c1252640b04b309c653658a6dfd4e3.png) ![](https://i-blog.csdnimg.cn/direct/1bbc25e4b8e94f8c850dcf58fbe61853.png) ![](https://i-blog.csdnimg.cn/direct/d33f8b75dd7a483a808faab446d632eb.png) ### 37.BROKER_replica ![](https://i-blog.csdnimg.cn/direct/aa24eb943f8b40058976853fac7e692f.png) ![](https://i-blog.csdnimg.cn/direct/c069bff3ddb8442195568c14bc6d59bd.png) ### 章节四.消费者 ### 38.消费者_消费方式 ![](https://i-blog.csdnimg.cn/direct/6b11220a3bed414aadf203a6968866d4.png) ### ![](https://i-blog.csdnimg.cn/direct/aecb85a9fb5e47659e54a75d023d4a2b.png) ### 39.消费者_消费规则 ![](https://i-blog.csdnimg.cn/direct/3686d4d411594f16a3fe64a3fa000427.png) ### ![](https://i-blog.csdnimg.cn/direct/7fc0213665284139aea658dbb5348d37.png) ### 40.消费者_独立消费主题实战 ![](https://i-blog.csdnimg.cn/direct/106b1e70a8124b31a9a75eeea66af507.png) ### ![](https://i-blog.csdnimg.cn/direct/fa405edf37534e86bc7f5b768895ad94.png) ### 41.消费者_独立消费主题实战一 package com . itbaizhan . kafka . consumer ; import org . apache . kafka . clients . consumer . Consumer Config ; import org . apache . kafka . clients . consumer . Consumer Record ; import org . apache . kafka . clients . consumer . Consumer Records ; 99 import org . apache . kafka . clients . consumer . KafkaCon sumer ; import org . apache . kafka . common . serialization . Stri ngDeserializer ; import java . time . Duration ; import java . util . ArrayList ; import java . util . Arrays ; import java . util . Properties ; // 创建一个独立消费者,消费 topicA 主题下的数据 public class CustomTopicConsumer { public static void main ( String \[\] args ) { //1. 创建消费者属性文件对象 Properties prop = new Properties (); //2. 为属性对象设置相关参数 // 设置 kafka 服务器 prop . put ( ConsumerConfig . BOOTSTRAP_SERVERS _CONFIG , "node2:9092" ); // 设置 key 和 value 的序列化类 prop . put ( ConsumerConfig . KEY_DESERIALIZER_ CLASS_CONFIG , StringDeserializer . class . getName ()); 100 prop . put ( ConsumerConfig . VALUE_DESERIALIZE R_CLASS_CONFIG , StringDeserializer . class . getName ()); // 设置消费者的消费者组的名称 prop . put ( ConsumerConfig . GROUP_ID_CONFIG , " testCg" ); //3. 创建消费者对象 KafkaConsumer \< String , String \> kafkaConsumer = new KafkaConsumer \< String , String \> ( prop ); //4. 注册要消费的主题 /\*ArrayList\ topics = new ArrayList\<\>(); topics.add("topicA"); kafkaConsumer.subscribe(topics);\*/ kafkaConsumer . subscribe ( Arrays . asList ( "to picA" )); //5. 拉取数据并打印输出 while ( true ){ //6. 设置 1s 消费一批数据 ConsumerRecords \< String , String \> consumerRecords = kafkaConsumer . poll ( Duration . ofSeconds ( 1 )) ; //7. 打印输出消费到的数据 101 6 运行 CustomTopicConsumer 类 7 在 Kafka 集群控制台,创建 Kafka 生产者,并输入数据。 8 在 IDEA 控制台观察接收到的数据。 9 Ctrl+C 关闭生产者 10 消费者程序 ### 42.消费者_独立消费主题实战二 ![](https://i-blog.csdnimg.cn/direct/84c2ae27c2e84a8c9f0654f186670189.png) ### 43.消费者_消费者组概述 ![](https://i-blog.csdnimg.cn/direct/c6f007b505f44ca7adc587846fa6fcb4.png) ### ![](https://i-blog.csdnimg.cn/direct/376bf51de3c24754991655ce701e12c4.png) ### 44.消费者_消费者组实战 ![](https://i-blog.csdnimg.cn/direct/b1742319d919424fb7bf88fe4d107530.png) ### ![](https://i-blog.csdnimg.cn/direct/dceab02fc97348ac9a550675a7a24b1d.png) ### ![](https://i-blog.csdnimg.cn/direct/d10d851b5fb04a9e9f2729d485799a90.png) ### 45.消费者_offset剖析 ![](https://i-blog.csdnimg.cn/direct/a4a45775f9d443a0bd9cd8ea3ec55cf8.png) ### ![](https://i-blog.csdnimg.cn/direct/dca8f225e5f74523b96aceae503011ea.png) ### ![](https://i-blog.csdnimg.cn/direct/b3c367027979493ab7e216232b9f5e10.png) ### 46.消费者_offset自动提交 ![](https://i-blog.csdnimg.cn/direct/6e96039c4b6542fc804bf98826be142a.png) ![](https://i-blog.csdnimg.cn/direct/db792a43495e44d49ade9d139f28a088.png) ![](https://i-blog.csdnimg.cn/direct/9564dfa1ecd14e31815bf2ef5314f818.png) ![](https://i-blog.csdnimg.cn/direct/7377770c9c2c48439a1a13b71fdd1164.png) ### 47.消费者_offset手动提交 ![](https://i-blog.csdnimg.cn/direct/7f7f24f8cb644b1c858728fcff45ad03.png) ![](https://i-blog.csdnimg.cn/direct/adfa508b948e4057b5bebe095757e544.png) ### 48.消费者_offset手动提交实战 同步提交: package com . itbaizhan . kafka . consumer ; import org . apache . kafka . clients . consumer . ConsumerConfi g ; import org . apache . kafka . clients . consumer . ConsumerRecor d ; import org . apache . kafka . clients . consumer . ConsumerRecor ds ; 118 import org . apache . kafka . clients . consumer . KafkaConsumer ; import org . apache . kafka . common . serialization . StringDes erializer ; import java . time . Duration ; import java . util . Arrays ; import java . util . Properties ; public class ConsumerHandSyncCommit { public static void main ( String \[\] args ) { //1. 创建属性对象 Properties prop = new Properties (); //2. 设置相关参数 prop . put ( ConsumerConfig . BOOTSTRAP_SERVERS_CONF IG , "node2:9092,node3:9092,node4:9092" ); prop . put ( ConsumerConfig . KEY_DESERIALIZER_CLASS _CONFIG , StringDeserializer . class . getName ()); prop . put ( ConsumerConfig . VALUE_DESERIALIZER_CLA SS_CONFIG , StringDeserializer . class . getName ()); // 配置消费者组 119 异步提交: prop . put ( ConsumerConfig . GROUP_ID_CONFIG , "cghan dSyncCommit" ); // 设置为非自动提交 prop . put ( ConsumerConfig . ENABLE_AUTO_COMMIT_CON FIG , false ); //3. 创建消费者对象 KafkaConsumer \< String , String \> consumer = new KafkaConsumer \< String , String \> ( prop ); //4. 注册消费主题 consumer . subscribe ( Arrays . asList ( "topicA" )); //5. 消费数据 while ( true ){ ConsumerRecords \< String , String \> records = consumer . poll ( Duration . ofSeconds ( 1 )); for ( ConsumerRecord record : records ){ System . out . println ( record . value ()); } //6. 同步提交 offset consumer . commitSync (); } } } package com . itbaizhan . kafka . consumer ; 120 import org . apache . kafka . clients . consumer . ConsumerConfi g ; import org . apache . kafka . clients . consumer . ConsumerRecor d ; import org . apache . kafka . clients . consumer . ConsumerRecor ds ; import org . apache . kafka . clients . consumer . KafkaConsumer ; import org . apache . kafka . common . serialization . StringDes erializer ; import java . time . Duration ; import java . util . Arrays ; import java . util . Properties ; public class ConsumerHandASyncCommit { public static void main ( String \[\] args ) { //1. 创建属性对象 Properties prop = new Properties (); //2. 设置相关参数 prop . put ( ConsumerConfig . BOOTSTRAP_SERVERS_CONF IG , "node2:9092,node3:9092,node4:9092" ); 121 prop . put ( ConsumerConfig . KEY_DESERIALIZER_CLASS _CONFIG , StringDeserializer . class . getName ()); prop . put ( ConsumerConfig . VALUE_DESERIALIZER_CLA SS_CONFIG , StringDeserializer . class . getName ()); // 配置消费者组 prop . put ( ConsumerConfig . GROUP_ID_CONFIG , "cghan dAsyncCommit" ); // 设置为非自动提交 prop . put ( ConsumerConfig . ENABLE_AUTO_COMMIT_CON FIG , false ); //3. 创建消费者对象 KafkaConsumer \< String , String \> consumer = new KafkaConsumer \< String , String \> ( prop ); //4. 注册消费主题 consumer . subscribe ( Arrays . asList ( "topicA" )); //5. 消费数据 while ( true ){ ConsumerRecords \< String , String \> records = consumer . poll ( Duration . ofSeconds ( 1 )); for ( ConsumerRecord record : records ){ 122 System . out . println ( record . value ()); } //6. 同步提交 offset consumer . commitAsync (); } } } ## Spark分布式计算框架一 ### 章节一.概述 ### 1.课程介绍 ![](https://i-blog.csdnimg.cn/direct/285aa226ad6b4931883287a028f1ad9e.png) ### ![](https://i-blog.csdnimg.cn/direct/254a7cadd4ea41c4aa77c104eb8fe4a6.png) ### ![](https://i-blog.csdnimg.cn/direct/0e0cb79e9ba247249a28e66b59d3e0fd.png) ### 2.概述_什么是Spark? ![](https://i-blog.csdnimg.cn/direct/10fcd223abb941a28b08386e9a321c7f.png) ### ![](https://i-blog.csdnimg.cn/direct/80ce14f0484e429f98a4b458dd674eee.png) ### 3.概述_Spark主要功能 ![](https://i-blog.csdnimg.cn/direct/7d78f0f0565d4be5bcbedff9408d4aeb.png) ![](https://i-blog.csdnimg.cn/direct/3e1a7cd8bcdf4364b97652b0aa2af840.png) ### 4.概述_SPARK与hadoop ![](https://i-blog.csdnimg.cn/direct/d6922be6fd6943e7af4cac2ef67bd38f.png) ### ![](https://i-blog.csdnimg.cn/direct/8774b74dc61949f487f7b6ff63b13583.png) ### 5.概述_spark技术栈 ![](https://i-blog.csdnimg.cn/direct/10f8890779bb456cb6be169c9bc67843.png) ### ![](https://i-blog.csdnimg.cn/direct/bbd6b9c13cce4051b7c7fc63988c86ae.png) ### 6.概述_PYSPARK VS SPARK ![](https://i-blog.csdnimg.cn/direct/cf5f21f05dda4b809b851bf7e57affd0.png) ### ![](https://i-blog.csdnimg.cn/direct/46f6d6ee764c43479259c9ac2c8571be.png) ### 章节二.运行模式 ### 7.运行模式_概述 ![](https://i-blog.csdnimg.cn/direct/5cfe2435e2a047bb98ea764f11d2d53a.png) ![](https://i-blog.csdnimg.cn/direct/7813437aa2504862bb09b57afaa21e83.png) ### 8.运行模式_WORDCOUNT一 ![](https://i-blog.csdnimg.cn/direct/60fc0a71df64409791755ee24400da28.png) ![](https://i-blog.csdnimg.cn/direct/f00ed02df8c04e598d6b0a30ff4f3c25.png) ![](https://i-blog.csdnimg.cn/direct/015598c4a00b4e6da82f0dd6de8386ae.png) ### 9.运行模式_WORDCOUNT二 ![](https://i-blog.csdnimg.cn/direct/241228d6ccad4c80b7cf1a0c25eb0f80.png) ![](https://i-blog.csdnimg.cn/direct/7f7036310a354fdf8a06a6b64fb47f4f.png) ![](https://i-blog.csdnimg.cn/direct/8b77adc911124538ba4473d7142fccf3.png) ### 10.运行模式_local模式安装 ![](https://i-blog.csdnimg.cn/direct/7e41741a54634b5fa6d230655d0bb718.png) ![](https://i-blog.csdnimg.cn/direct/58dbc113f3b1451f87ee4e0c8eef0a39.png) ### 11.运行模式_local模式webui ![](https://i-blog.csdnimg.cn/direct/53a1cdc86c8544548df6a4f2e5b689a0.png) ![](https://i-blog.csdnimg.cn/direct/bfbf24943c434a0483f25dad1c70f6d2.png) ### 12.运行模式_Spark目录介绍 ![](https://i-blog.csdnimg.cn/direct/016a8f80cf954b8ea1e3f4daa4c20a56.png) ![](https://i-blog.csdnimg.cn/direct/dd5204d778254af08fa6b0eb338e86df.png) ### 13.运行模式_spark源码解析 ![](https://i-blog.csdnimg.cn/direct/1bc0d1c047544ea1ba1b5b28f5d97db1.png) ![](https://i-blog.csdnimg.cn/direct/95e463101114412486d2b75dcf90ab6c.png) ### 14.运行模式_spark-submit ![](https://i-blog.csdnimg.cn/direct/d1c6faa7538c4f2ab64d65a1387911aa.png) ![](https://i-blog.csdnimg.cn/direct/dc392f4ba21f4e268ced0117809aa065.png) ### 15.运行模式_standalone架构分析 ![](https://i-blog.csdnimg.cn/direct/a9d8dbbb2e72447484ed31314c958d00.png) ![](https://i-blog.csdnimg.cn/direct/1bc88cb1bd5b467cab5790408c9af547.png) ### 16.运行模式_standalone模式安装一 ![](https://i-blog.csdnimg.cn/direct/202f4aaed4964aae88f36de008f87e08.png) ### 17.运行模式_standalone模式安装二 ![](https://i-blog.csdnimg.cn/direct/1bf8a14037d14efab5fbdda11a453537.png) ![](https://i-blog.csdnimg.cn/direct/2c593b81853c494ca4713b3f39949d23.png) ### 18.运行模式_standalone启动测试 ![](https://i-blog.csdnimg.cn/direct/1693bb3f9c0b4b39b2973cf871be20eb.png) ![](https://i-blog.csdnimg.cn/direct/ded134f85f724464a9df8883398e6768.png) ### 19.运行模式_standalone执行任务 ![](https://i-blog.csdnimg.cn/direct/29a2958f8b4f46ea9d20a729f028023c.png) ![](https://i-blog.csdnimg.cn/direct/00677cdb160746fda112ecce3583f057.png) ### 20.运行模式_查看历史日志webui ![](https://i-blog.csdnimg.cn/direct/9533e968cbd94bc6b1828e96b0abe419.png) ### 21.运行模式_standaloneHA安装 ![](https://i-blog.csdnimg.cn/direct/e59d59c04c3b4dc5baa65f7b0d990597.png) ### 22.运行模式_standalone测试 ![](https://i-blog.csdnimg.cn/direct/f6825b03187e467c879e0cba37f36693.png) ![](https://i-blog.csdnimg.cn/direct/1530c4c7e6184b4b99866f2f0a3ccf3a.png) ### 23.运行模式_YARN模式概述 ![](https://i-blog.csdnimg.cn/direct/e4d9de2e2f114840923ed92a36f29ae7.png)​​​​​​​ ![](https://i-blog.csdnimg.cn/direct/8d1532fdd8be4560b3d82b362e532123.png) ### 24.运行模式_YARN模式安装 ![](https://i-blog.csdnimg.cn/direct/e666d1a17c544c1a96a15979be7331a9.png) ![](https://i-blog.csdnimg.cn/direct/fe045c4227324ca9af014258f43c3df8.png) ![](https://i-blog.csdnimg.cn/direct/1efb411a75ba4c85ab0a396267dca64f.png) ### 25.运行模式_yarn client ![](https://i-blog.csdnimg.cn/direct/a1ac1074ffc94d8f9cd7c19bfb1c3529.png) ### 26.运行模式_yarn cluster ![](https://i-blog.csdnimg.cn/direct/6684e1d0f247452889252a9a87ee62ca.png) ![](https://i-blog.csdnimg.cn/direct/dc29aa9c2a7f40e2930f54c70831116a.png) ### 27.运行模式_spark submit参数 ![](https://i-blog.csdnimg.cn/direct/e44292e1db704f31a08665ce9d43f7cb.png) ![](https://i-blog.csdnimg.cn/direct/0b0290356e024d32bb1eb36a333e6d69.png)

相关推荐
..过云雨6 分钟前
03.【C语言学习笔记】分支和循环
c语言·笔记·学习
寄思~10 分钟前
Tkinter --按钮点击事件应用场景
开发语言·笔记·python·学习
汤姆和佩琦31 分钟前
LLMs基础学习(八)强化学习专题(4)
学习·强化学习·策略随机探索
JavaGPT2 小时前
Kafka 4.0.0集群部署
分布式·kafka
用余生去守护2 小时前
vba学习系列(11)--批退率&通过率等数据分析
学习·数据分析
API_technology2 小时前
亚马逊 API 实战:商品详情页实时数据采集接口开发与调用
大数据·开发语言·python·数据挖掘
isfox18 小时前
Hadoop 版本进化论:从 1.0 到 2.0,架构革命全解析
大数据·后端
腾讯云中间件19 小时前
限流系列之二:TDMQ CKafka 版限流方案详解及最佳实践
kafka·消息队列·腾讯
星环科技TDH社区版21 小时前
星环科技产品可存储的表格式功能介绍以及创建示例
大数据·数据库