spring集成kfka实现消息队列

1.搭建kafka运行环境 ,下载地址:http://kafka.apache.org/downloads

  • 下载完修改安装文件config里面的server.properties文件,将listeners=PLAINTEXT://IP:9092改成服务器的IP,修改zookeeper注册地址
  • .\bin\windows\kafka-server-start.bat .\config\server.properties使用该命令启动kafka
  • 测试一下是否可以发送消息
    bin\windows\kafka-console-producer.bat –broker-list IP9:092 –topic pipi
    bin\windows\kafka-console-consumer.bat –bootstrap-server IP:9092 –topic
    pipi –from- beginning

2.搭建生产者环境

  • 配置producer.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 定义producer属性-->
<bean id="kafakaproducer"  class="java.util.HashMap">
 <constructor-arg>
 <map>
     <entry key="bootstrap.servers"  value="10.168.114.91:9092"/>
     <entry key="group.id"  value="0"/>
     <entry key="retries"  value="10"/>
     <entry key="batch.size"  value="16384"/>
     <entry key="linger.ms"  value="1"/>
     <entry key="key.serializer"  value="org.apache.kafka.common.serialization.IntegerSerializer"/>
     <entry key="value.serializer"  value="org.apache.kafka.common.serialization.StringSerializer"/>
 </map>
 </constructor-arg>
</bean>
<!--配置kafka的工厂 -->
<bean id="producerFactory" class="org.springframework.kafka.core.DefaultKafkaProducerFactory">
<constructor-arg>
     <ref bean="kafakaproducer"/>
</constructor-arg>
</bean>
<bean id="kafkaTemplate" class="org.springframework.kafka.core.KafkaTemplate">
<constructor-arg>
<ref bean="producerFactory"/>
</constructor-arg>
    <property name="defaultTopic" value="mhb-test"/>
    </bean>
</beans>
  • 测试类
public class SpringKafkaTest {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:config/spring-kafka.xml");
        KafkaTemplate kafkaTemplate = ctx.getBean("kafkaTemplate", KafkaTemplate.class);
        for(int i=0;i<1000000000;i++){
            String message="第"+i+"条信息";
            kafkaTemplate.send("pipi",message);
            System.out.println("message="+message);
        }

    }
}

3 . 搭建消费者环境

  • 配置consumer.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 定义消费者属性 -->
    <bean id="kafkaConsumerProperites" class="java.util.HashMap">
        <constructor-arg>
            <map>
                <entry key="bootstrap.servers" value="10.168.114.91:9092" />
                <entry key="group.id" value="0"/>
                <entry key="enable.auto.commit" value="true"/>
                <entry key="auto.commit.interval.ms" value="1000"/>
                <entry key="session.timeout.ms" value="15000"/>
                <entry key="key.deserializer" value="org.apache.kafka.common.serialization.IntegerDeserializer"/>
                <entry key="value.deserializer" value="org.apache.kafka.common.serialization.StringDeserializer"/>
            </map>
        </constructor-arg>
    </bean>
    <!--配置kafka的工厂 -->
    <bean id="kafkaConsumerFactory"
        class="org.springframework.kafka.core.DefaultKafkaConsumerFactory">
        <constructor-arg>
            <ref bean="kafkaConsumerProperites" />
        </constructor-arg>
    </bean>
<!--消费者具体实体类-->
    <bean id="KafkaConsumerListener" class="service.KafkaConsumerListener" />
    <!--配置容器属性-->
    <bean id="consumerContainerProperties"
        class="org.springframework.kafka.listener.config.ContainerProperties">
        <constructor-arg value="pipi" />
        <property name="messageListener" ref="KafkaConsumerListener" />
    </bean>
<!--配置消费者容器-->
    <bean id="conusmerContainer"class="org.springframework.kafka.listener.KafkaMessageListenerContainer " init-method="doStart">
        <constructor-arg ref="kafkaConsumerFactory" />
        <constructor-arg ref="consumerContainerProperties" />
    </bean>
</beans>
  • 配置监听器
@Component("kafkaConsumerListener")
public class KafkaConsumerListener implements MessageListener<String, String>{
    @Override
    public void onMessage(ConsumerRecord<String, String> record) {
        System.out.printf("接收到消息="+ record.value());        
    }
}
  • 消费者是web项目,启动后监听器就开始工作了,然后跑生产者的测试类就可以在消费者中控制台中看到日志了、

一个kafka消费者的管理工具kafkamonitor 在界面中就能看到消息模式和消费者

  • kafkamonitor是一个jar,只需把它放在kafka安装目录windows下,编写一个脚本并运行即可启动项目
java -cp KafkaOffsetMonitor-assembly-0.2.0.jar com.quantifind.kafka.offsetapp.OffsetGetterWeb --zk 10.168.114.91:2181 --port 8089 --refresh 10.seconds --retain 1.days
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kafka是一个分布式流处理平台,常被用作高吞吐量的分布式消息系统。关于Kafka的常见面试题有以下几个方面: 1. Kafka的读写分离: 自Kafka 2.4版本开始,Kafka提供了有限度的读写分离功能。也就是说,Follower副本可以对外提供读服务。这样可以减轻Leader副本的负载,提高系统的可伸缩性和容错性。 2. Kafka数据一致性原理: Kafka使用分布式复制机制来保证数据的一致性和可靠性。Kafka采用了多副本的方式来存储数据,每个分区都有一个Leader副本和若干个Follower副本。Kafka使用基于日志的复制方式,将消息以日志的形式持久化到磁盘上,并将复制的操作作为一次原子操作。通过Leader副本将消息复制到其他Follower副本,确保所有副本的数据一致性。 3. Kafka消息的幂等性: 幂等性是指对于同一条消息的多次处理操作,应该保证最终结果与一次处理操作相同。对于消息队列来说,重复消息的问题常常存在。为了保证消息的幂等性,Kafka建议在业务层进行数据的一致性幂等校验。即在业务逻辑中,判断接收到的消息是否已经处理过,如果已经处理过,则忽略该消息,避免重复处理。 综上所述,Kafka的常见面试题主要涉及到读写分离、数据一致性原理和消息的幂等性。这些问题都是Kafka分布式消息系统的核心概念,对于理解和应用Kafka系统非常重要。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [java被问过的面试题-初中级-记录1](https://blog.csdn.net/m0_56169170/article/details/129498345)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Kafka 面试题(2022)](https://blog.csdn.net/weixin_53597801/article/details/126897297)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值