kafka例子

kafka例子


1、kafka是集群消息中间件依赖Zookeeper,所以先 安装Zookeeper环境启动Zookeeper


2、下载kafka并启动。


3、运行生产者、消费者。


代码例子:

先创建maven项目

pom.xml文件内容:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cn.com</groupId>
  <artifactId>kafkademo</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>kafkademo</name>

  <dependencies>
 
     <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka_2.12</artifactId>
        <version>1.1.0</version>
     </dependency>
 
    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>3.8.1</version>
       <scope>test</scope>
    </dependency>
    
  </dependencies>
 
  <build>
    <finalName>kafkademo</finalName>
  </build>
</project>

生产者ProducerDemo.java:

package cn.com.demo;

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;

import java.util.Properties;

public class ProducerDemo {

    // Topic
    private static final String topic = "kafkaTopic";

    public static void main(String[] args) throws Exception {

        Properties props = new Properties();
        /*集群  kafka服务地址*/
       //props.put("bootstrap.servers", "192.168.1.120:9092,192.168.1.135:9093,192.168.1.227:9094");
        props.put("bootstrap.servers", "127.0.0.1:9092");
        /*消息确认方式:
         * 0 代表:不进行消息接收是否成功的确认(默认值);
           1 代表:当Leader副本接收成功后,返回接收成功确认信息;
          -1 代表:当Leader和Follower副本都接收成功后,返回接收成功确认信息*/
        props.put("acks", "1");
        props.put("group.id", "1111");//用来唯一标识consumer进程所在组的字符串
        /*设置大于0的值将使客户端重新发送任何数据,一旦这些数据发送失败。注意,这些重试与客户端接收到发送错误时的重试没有什么不同。
                           允许重试将潜在的改变数据的顺序,如果这两个消息记录都是发送到同一个partition,则第一个消息失败第二个发送成功,则第二条消息会比第一条消息出现要早*/
        props.put("retries", "0");
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

        //生产者实例
        KafkaProducer producer = new KafkaProducer(props);

        int i = 1;

        // 发送业务消息
        // 读取文件 读取内存数据库 读socket端口
        System.out.println("生产者发送消息:");
        while(i<10) {
            //Thread.sleep(1000);
            producer.send(new ProducerRecord<String, String>(topic, "key:" + i, "value:" + i));
            //producer.close();
            System.out.println(OADate.getDatetime()+"key:" + i + " " + "value:" + i);
            i++;
        }
    }
}


消费者ConsumerDemo.java:

package cn.com.demo;

import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Arrays;
import java.util.Properties;

public class ConsumerDemo {

    private static final Logger logger = LoggerFactory.getLogger(ConsumerDemo.class);
    private static final String topic = "kafkaTopic";

    public static void main(String[] args) {

        Properties props = new Properties();
        //集群
        //props.put("bootstrap.servers", "192.168.1.120:9092,192.168.1.135:9093,192.168.1.227:9094");
        props.put("bootstrap.servers", "127.0.0.1:9092");
        props.put("group.id", "1111");
        props.put("enable.auto.commit", "true");//如果为真,consumer所fetch的消息的offset将会自动的同步到zookeeper
        props.put("auto.commit.interval.ms", "1000");//consumer 隔多久提交 offsets --消费指针
        props.put("auto.offset.reset", "earliest");
        props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

        KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(props);

        consumer.subscribe(Arrays.asList(topic));
        System.out.println("消费者接收消息");
        while (true) {
            ConsumerRecords<String, String> records = consumer.poll(1000);
            for (ConsumerRecord<String, String> record : records) {
                System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
            }
        }
    }
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个基于Spring Boot的Kafka应用程序的示例代码。这个示例应用程序包含了一个生产者和一个消费者,用于发送和接收Kafka消息。 首先,我们需要添加以下依赖项到我们的pom.xml文件中: ``` <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency> ``` 接下来,我们需要配置Kafka相关的bean。在这个示例中,我们使用了KafkaAutoConfiguration和KafkaProperties来配置KafkaTemplate和其他Kafka相关的bean。我们还定义了一个名为kafkaListenerContainerFactory的KafkaListenerContainerFactory bean,用于配置消息监听器容器。 ``` @Configuration @EnableKafka public class KafkaConfig { @Value("${spring.kafka.bootstrap-servers}") private String bootstrapServers; @Bean public KafkaTemplate<String, String> kafkaTemplate() { return new KafkaTemplate<>(producerFactory()); } @Bean public ProducerFactory<String, String> producerFactory() { Map<String, Object> producerConfigProps = new HashMap<>(); producerConfigProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers); producerConfigProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); producerConfigProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); return new DefaultKafkaProducerFactory<>(producerConfigProps); } @Bean public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaListenerContainerFactory() { ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>(); factory.setConsumerFactory(consumerFactory()); return factory; } @Bean public ConsumerFactory<String, String> consumerFactory() { Map<String, Object> consumerConfigProps = new HashMap<>(); consumerConfigProps.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers); consumerConfigProps.put(ConsumerConfig.GROUP_ID_CONFIG, "test-group"); consumerConfigProps.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); consumerConfigProps.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); return new DefaultKafkaConsumerFactory<>(consumerConfigProps); } } ``` 接下来,我们可以定义一个生产者类,用于发送Kafka消息。在这个示例中,我们使用了一个Rest API来触发生产者发送消息的操作。 ``` @RestController public class KafkaProducerController { @Autowired private KafkaTemplate<String, String> kafkaTemplate; @PostMapping("/kafka/send") public void sendMessage(@RequestParam String message) { kafkaTemplate.send("test-topic", message); } } ``` 最后,我们可以定义一个消费者类,用于接收Kafka消息。在这个示例中,我们使用了@KafkaListener注解来声明一个消息监听器方法,用于接收Kafka消息。 ``` @Service public class KafkaConsumer { @KafkaListener(topics = "test-topic", groupId = "test-group") public void listen(String message) { System.out.println("Received message: " + message); } } ``` 这就是一个基于Spring Boot的Kafka应用程序的示例代码。我们可以运行这个示例应用程序,并使用Rest API来触发生产者发送消息的操作,然后在控制台上查看消费者接收到的消息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值