java Kafka生产者推送数据与消费者接收数据(参数配置以及案例)_java实现kafka消息发送和接收

最后

权威指南-第一本Docker书

引领完成Docker的安装、部署、管理和扩展,让其经历从测试到生产的整个开发生命周期,深入了解Docker适用于什么场景。并且这本Docker的学习权威指南介绍了其组件的基础知识,然后用Docker构建容器和服务来完成各种任务:利用Docker为新项目建立测试环境,演示如何使用持续集成的工作流集成Docker,如何构建应用程序服务和平台,如何使用Docker的API,如何扩展Docker。

总共包含了:简介、安装Docker、Docker入门、使用Docker镜像和仓库、在测试中使用Docker、使用Docker构建服务、使用Fig编配Docke、使用Docker API、获得帮助和对Docker进行改进等9个章节的知识。

image

image

image

image

关于阿里内部都在强烈推荐使用的“K8S+Docker学习指南”—《深入浅出Kubernetes:理论+实战》、《权威指南-第一本Docker书》,看完之后两个字形容,爱了爱了!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

以上参数配置只是案例,实际参数配置需要根据业务情况自己设置
下面是生产的方法介绍:

close(): 关闭生产者,释放相关资源。
close(Duration timeout): 在指定的超时时间内关闭生产者,释放相关资源。
initTransactions(): 初始化事务,启用事务支持。
beginTransaction(): 开始事务。
send(ProducerRecord<K, V> record): 发送一条消息记录到指定的主题。
send(ProducerRecord<K, V> record, Callback callback): 发送一条消息记录,并附带一个回调函数用于异步处理发送结果。
send(ProducerRecord<K, V> record, ProducerCallback<T> callback): 发送一条消息记录,并使用自定义的回调函数处理发送结果。
sendOffsetsToTransaction(Map<TopicPartition, OffsetAndMetadata> offsets, String consumerGroupId): 将消费者组的偏移量提交给事务。
partitionsFor(String topic): 获取指定主题的分区信息。
metrics(): 获取生产者的度量指标信息。
flush(): 将所有已挂起的消息立即发送到Kafka服务器,等待服务器确认后再返回。
commitTransaction(): 提交当前事务。
abortTransaction(): 中止当前事务。
sendOffsetsToTransaction(Map<TopicPartition, OffsetAndMetadata> offsets, ConsumerGroupMetadata groupMetadata): 将消费者组的偏移量和消费者组元数据提交给事务。

可能遇见的问题

1.多个topic发送消息的时候总有1.2发送失败 报Failed to update metadata after 60000ms
这种情况出现的原因可能是Kafka集群中Broker的元数据信息还没有被更新到Kafka客户端中,导致Kafka客户端无法连接到指定的Broker。

解决

增加等待时间:可以通过设置max.block.ms属性来增加等待时间
提高重试次数:可以通过设置retries属性来提高重试次数
检查Broker配置
检查网络连接
检查Kafka版本

如果下面3个都没问题,就增加等待时间和重试次数。本人遇到这样的问题解决了

消费者 推送数据

import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import java.util.Arrays;
import java.util.Properties;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class KafkaConsumerExample {
    public static void main(String[] args) {
        // 配置消费者参数
		Properties props = new Properties();
		/\*
 bootstrap.servers
 Kafka集群中Broker的地址列表,格式为"hostname:port",例如:"localhost:9092"。可以配置多个Broker,用逗号分隔。
 \*/
		props.put("bootstrap.servers", "ip:port");
		/\*
 group.id
 消费者组的名称,同一个消费者组中的消费者会共享消费消息的责任。例如:"test"。
 \*/
		props.put("group.id", "test");
		/\*
 enable.auto.commit
 是否自动提交偏移量,默认为true。如果为false,则需要手动提交偏移量。
 \*/
		props.put("enable.auto.commit", "true");
		/\*
 session.timeout.ms
 消费者会话超时时间(毫秒),如果消费者在该时间内没有向Kafka Broker发送心跳,则会被认为已经失效。默认10000毫秒。
 \*/
		props.put("session.timeout.ms", "30000");
		/\*
 auto.offset.reset
 如果消费者在初始化时没有指定偏移量或指定的偏移量不存在,则从哪个位置开始消费,默认latest,即从最新的消息开始消费。其他可选值为earliest和none。
 \*/
		props.put("auto.offset.reset", "earliest");
		/\*
 
 key.deserializer
 key的反序列化方式,例如:"org.apache.kafka.common.serialization.StringDeserializer"。
 \*/
		props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
		/\*
 value.deserializer
 value的反序列化方式,例如:"org.apache.kafka.common.serialization.StringDeserializer"。
 \*/
		props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
		/\*
 max.poll.records
 每次拉取消息的最大记录数,默认500条。
 \*/
		props.put("max.poll.records", "10000");
		/\*
 fetch.min.bytes
 每次拉取的最小字节数,默认1字节。
 
 fetch.max.bytes
 每次拉取的最大字节数,默认52428800字节,即50MB。
 
 fetch.max.wait.ms
 最长等待时间(毫秒),如果在该时间内没有拉取到任何消息,则返回空结果。默认500毫秒。
 \*/
		props.put("fetch.min.bytes", "1024");
		props.put("fetch.max.bytes", "1048576");
		props.put("fetch.max.wait.ms", "500");
		
		/\*
 max.partition.fetch.bytes
 每个分区最大拉取字节数,默认1048576字节,即1MB。
 \*/
		props.put("max.partition.fetch.bytes", "1024");
		/\*
 connections.max.idle.ms
 最大空闲连接时间(毫秒),超过该时间则连接被认为已经过期并关闭。默认540000毫秒,即9分钟。
 \*/
		props.put("connections.max.idle.ms", "540000");
		
		/\*
 request.timeout.ms
 请求超时时间(毫秒),如果在该时间内没有收到Broker的响应,则认为请求失败。默认30000毫秒。
 \*/
		props.put("request.timeout.ms", "40000");
		/\*
 retry.backoff.ms
 重试等待时间(毫秒),如果请求失败,则等待一段时间后再次重试。默认500毫秒。
 \*/
		props.put("retry.backoff.ms", "500");
		
		/\*
 security.protocol
 安全协议类型,例如SSL或SASL\_SSL。
 
 ssl.keystore.location
 SSL证书的路径和名称。
 
 ssl.keystore.password
 SSL证书的密码。
 
 ssl.truststore.location
 SSL信任证书库的路径和名称。
 
 ssl.truststore.password
 SSL信任证书库的密码。
 \*/
		props.put("security.protocol", "SSL");
		props.put("ssl.keystore.location", "/path/to/keystore");
		props.put("ssl.keystore.password", "password");
		props.put("ssl.truststore.location", "/path/to/truststore");
		props.put("ssl.truststore.password", "password");
        // 创建Kafka消费者实例
        KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
        // 订阅主题
        consumer.subscribe(Arrays.asList("my-topic"));
        // 创建线程池
        ExecutorService executor = Executors.newFixedThreadPool(6);
        // 消费消息
        while (true) {
            ConsumerRecords<String, String> records = consumer.poll(100);
            for (ConsumerRecord<String, String> record : records) {
                // 获取消息所在分区的编号
                int partition = record.partition();
                // 将消息提交给对应的线程进行处理
                executor.submit(new MessageHandler(record.value(), partition));
            }
        }
    }
    // 消息处理器
    static class MessageHandler implements Runnable {
        private final String message;
        private final int partition;
        public MessageHandler(String message, int partition) {
            this.message = message;
            this.partition = partition;
        }
        @Override
        public void run() {
            // 对消息进行处理
            System.out.printf("Partition %d: Message received: %s%n", partition, message);
        }
    }
}

以上参数根据自己需求填写
可以根据分区 使用多线程执行

下面是消费者的方法讲解

subscribe(Collection<String> topics): 订阅一个或多个主题,开始消费这些主题中的消息。


**最后,附一张自己面试前准备的脑图:**

![image](https://img-blog.csdnimg.cn/img_convert/1426949888e17ff64886050cc24935d4.webp?x-oss-process=image/format,png)

**面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典**


*   Java核心知识整理

![image](https://img-blog.csdnimg.cn/img_convert/5e677c93176df07a6d54ba97318588c2.webp?x-oss-process=image/format,png)


*   Spring全家桶(实战系列)

![image.png](https://img-blog.csdnimg.cn/img_convert/b52c30caa159d20b81b07ba7f1d36e01.webp?x-oss-process=image/format,png)


**Step3:刷题**

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

**以下是我私藏的面试题库:**

![image](https://img-blog.csdnimg.cn/img_convert/27c69cf05dec8e4a73b193945d43b40a.webp?x-oss-process=image/format,png)

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

力去实现它。

最后祝愿各位身体健康,顺利拿到心仪的offer!

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值