余老师带你学习大数据-Spark快速大数据处理第十章Kafka第五节Kafka-Producer

Kafka Producer

Producer发送模式

1、同步发送
2、异步发送
3、异步回调发送

业务流程

在这里插入图片描述

producer的发送大致分为两步,第一步是先构建producer,第二步是send出去

Producer发送原理

在这里插入图片描述

kafka的生产者主要做了三个事情,第一个是直接发送,直接发送是指kafka会把producer的消息发送到整个分区leader的broker上,一般不会涉及到其他的干预。还会缓存producer的主节点列表,如果leader出现问题会刷新列表。
第二个是负载均衡,负载均衡器是默认的,会告诉我们两件事,第一是kafka的producer数据可以被控制在哪个partition上,第二个是数据具体在哪个partition上由谁来决定的,这个是由我们的客户端决定的。
第三个是异步发送,异步发送分两件事情,第一个是它本身是future对象,这个future对象可以不获取。第二是做批量发送,会在内存里积累数据,当单次请求发送数据达到一定的预值会按批次的将数据发送到kafka上,这样首先减少了io操作,变相的提高了吞吐量。

代码操做及解释

1、接之前的操作,如果没有之前的操作,就先把app-11、app-12、app-13的ip地址写入hosts文件中。如果写完之后,打开pom文件,将 com.kinginsai.bigdata.kafka.admin. AdminSample修改为com.kinginsai.bigdata.kafka.producer.ProducerSample,其实这里是修改主程序,运行那个class填写那个路径。
在这里插入图片描述
往后的运行操作:
先编译:mvn compile -Dexec.mainClass="com.kinginsai.bigdata.kafka.producer.ProducerSample"
后运行:mvn exec:java -Dexec.mainClass="com.kinginsai.bigdata.kafka.producer.ProducerSample" -Dexec.classpathScope=runtime -Dmaven.test.skip=true
2、Producer异步发送演示。

以下运行程序都是先编译后运行,上面都是配置信息。
在这里插入图片描述
3、检查运行之后是否是我们想象的结果,登录app-11,新建new terminal,以hadoop用户登录,在进入到kafka的目录下
命令:su – hadoopcd /hadoop/Kafka/kafka_2.11-2.2.0/
在这里插入图片描述

4、查看接受消息
命令:bin/kafka-console-consumer.sh --bootstrap-server app-11:9092 app-12:9092 app-13:9092 --topic songshu-topic --from-beginning
在这里插入图片描述

5、Producer异步阻塞发送演示,区别在于send有返回值,是future类型,future是发出去就不管了,在get之前都不会获取返回值,但是每次发送都获取一下,就相当于把返回值阻塞在这个位置上了,就是发送一次停一次。随机发送。
在这里插入图片描述
运行结果:
在这里插入图片描述

6、Producer异步发送带回调函数,offset是不同的,offset是针对partition的,会有不同的partition有相同的offset,offset是做文件解锁的
在这里插入图片描述
运行结果:
在这里插入图片描述

一般来讲我们经常用的是Producer异步发送,如果需要做消息记录的用Producer异步发送带回调函数,这个会将值回调,阻塞会阻塞在哪。
7、Producer异步发送带回调函数和Partition负载均衡,自定义的partition。结果的partition是五个0和五个1。
在这里插入图片描述
在这里插入图片描述
运行结果:
在这里插入图片描述

常见问题

在这里插入图片描述

问题解释:不识别app-11、app-12、app-13的ip地址
解决方法:将app-11、app-12、app-13的ip地址写入hosts文件中

详细学习内容可观看Spark快速大数据处理扫一扫~~~或者引擎搜索Spark余海峰

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45810046/article/details/113106005