北京设计网站建设,黑龙江网站备案,小程序注册开发流程,本地wordpress预览#x1f345; 作者简介#xff1a;王哥#xff0c;CSDN2022博客总榜Top100#x1f3c6;、博客专家#x1f4aa; #x1f345; 技术交流#xff1a;定期更新Java硬核干货#xff0c;不定期送书活动 #x1f345; 王哥多年工作总结#xff1a;Java学习路线总结#xf… 作者简介王哥CSDN2022博客总榜Top100、博客专家 技术交流定期更新Java硬核干货不定期送书活动 王哥多年工作总结Java学习路线总结 点击 突击面试 数十万人的面试选择 面试说人话系列《面试1v1》 我是 javapub一名 Markdown 程序员从八股文种子选手。 《面试1v1》 连载中… 面试官 嗨候选人你知道Kafka消息系统是如何工作的吗
候选人 嗨面试官当然知道Kafka是一个高吞吐量的分布式消息系统它采用了Push和Pull的结合方式来实现消息传递。
面试官 哦那你能具体解释一下Kafka的Push和Pull模式吗
候选人 当然可以在Kafka中生产者Producer负责将消息推送Push到Kafka的Broker节点而消费者Consumer则从Broker节点拉取Pull消息进行处理。
面试官 很好那你能给我们看一段简单的代码来说明这个过程吗
候选人 当然可以让我给你展示一段Java代码来说明Kafka的Push和Pull模式
import org.apache.kafka.clients.producer.*;
import org.apache.kafka.clients.consumer.*;
import org.apache.kafka.common.serialization.StringDeserializer;
import org.apache.kafka.common.serialization.StringSerializer;import java.util.Properties;public class KafkaDemo {private static final String TOPIC my_topic;private static final String BOOTSTRAP_SERVERS localhost:9092;public static void main(String[] args) {// 生产者代码Properties producerProps new Properties();producerProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_SERVERS);producerProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());producerProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());ProducerString, String producer new KafkaProducer(producerProps);producer.send(new ProducerRecord(TOPIC, Hello Kafka!));// 消费者代码Properties consumerProps new Properties();consumerProps.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_SERVERS);consumerProps.put(ConsumerConfig.GROUP_ID_CONFIG, my_consumer_group);consumerProps.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());consumerProps.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());ConsumerString, String consumer new KafkaConsumer(consumerProps);consumer.subscribe(Collections.singleton(TOPIC));ConsumerRecordsString, String records consumer.poll(Duration.ofMillis(1000));for (ConsumerRecordString, String record : records) {System.out.println(Received message: record.value());}}
}面试官 太棒了这段代码很好地展示了Kafka的Push和Pull模式。那么你能解释一下代码中的关键部分吗
候选人 当然可以在生产者部分我们配置了Kafka的地址和序列化器并使用producer.send()方法将消息推送到名为my_topic的主题中。而在消费者部分我们配置了Kafka的地址、消费者组ID和反序列化器并使用consumer.poll()方法从主题中拉取消息然后进行处理。
面试官 非常清晰明了你对Kafka的Push和Pull模式有很好的理解。有没有什么需要注意的地方呢
候选人 当然有在使用Kafka的Push模式时生产者需要确保消息能够成功推送到Broker节点而在使用Pull模式时消费者需要定期拉取消息以确保不会错过任何重要的数据。
面试官 非常好你对Kafka的Push和Pull模式的理解非常到位。谢谢你的回答
候选人 非常感谢我很高兴能够分享我的知识。如果还有其他关于Kafka或者任何其他技术的问题我都会尽力帮助解答 最近我在更新《面试1v1》系列文章主要以场景化的方式讲解我们在面试中遇到的问题致力于让每一位工程师拿到自己心仪的offer感兴趣可以关注JavaPub追更 《面试1v1》 连载中… 目录合集
Giteehttps://gitee.com/rodert/JavaPub
GitHubhttps://github.com/Rodert/JavaPub
http://javapub.net.cn