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 – hadoop
、cd /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文件中