kafka consumer api连接kafka server

背景

最近在公司老大要做一个kafka consumer接收kafka server的message,其实很简单的一个功能,用kafka都有些大材小用了,一般的JMS都可以了。

之前没有用过kafka,所以去简单了解了一下。

kafka的主要功能

  1. 发布和订阅消息(流),在这方面,它类似于一个消息队列或企业消息系统。
  2. 容错的方式存储消息(流)。
  3. 在消息流发生时处理它们。

kafka核心API

  • 生产者Producer API
  • 消费者Consumer API
  • 流处理Streams API
  • Connector API

基本术语

Topic

Kafka将消息种子(Feed)分门别类,每一类的消息称之为一个主题(Topic).

Producer

发布消息的对象称之为主题生产者(Kafka topic producer)

Consumer

订阅消息并处理发布的消息的种子的对象称之为主题消费者(consumers)

Broker

已发布的消息保存在一组服务器中,称之为Kafka集群。集群中的每一个服务器都是一个代理(Broker). 消费者可以订阅一个或多个主题(topic),并从Broker拉数据,从而消费这些已发布的消息。

版本

之前做的时候老大说用high level consumer API或者low level conxumer API来做,但是我在做的过程中发现对接的kafka(网管团队维护)版本是0.11的,在网上查阅了解到kafka0.9之后新增了一个Java消费者用于替换现在基于zookeeper(一个分布式的应用程序协调服务,如果有做过dubbo项目的同学应该很熟悉)的high or low level consumer API。

依赖包

<dependency>
      <groupId>org.apache.kafka</groupId>
      <artifactId>kafka-clients</artifactId>
      <version>0.10.1.0</version>
</dependency>

常用命令

查看当前kafka所有的topic
./kafka-topics.sh –list –zookeeper localhost:2181/nokia/nsp/kafka

producer发送message
./kafka-console-producer.sh –broker-list localhost:9092 –topic ns-eg-2cea2382-2f25-4524-80ec-31949dd37c0c

扫描二维码关注公众号,回复: 1933116 查看本文章

consumer接受message
./kafka-console-consumer.sh –bootstrap-server localhost:9092 –topic ns-eg-2cea2382-2f25-4524-80ec-31949dd37c0c –from-beginning

查看版本(kafka没有类似于java -version这样的命令)
find ./libs/ -name *kafka_* | head -1 | grep -o ‘\kafka[^\n]*’

这个命令查找到类似于kafka_2.9.2-0.8.1.1.jar.asc 这样的jar包,然后这个jar包的名称前面的数据2.9.2是scala(kafka就是用scala开发的)的版本,后面的0.8.1.1就是所用的kafka的版本。

# 使用

因为我只使用到了kafka consumer API,所以这里列出consumer的代码

Properties props = new Properties();
     props.put("bootstrap.servers", "localhost:9092");
     props.put("group.id", "test");
     props.put("enable.auto.commit", "true");
     props.put("auto.commit.interval.ms", "1000");
     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<>(props);
     consumer.subscribe(Arrays.asList("foo", "bar"));
     while (true) {
         ConsumerRecords<String, String> records = consumer.poll(100);
         for (ConsumerRecord<String, String> record : records)
             System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
     }

以上是自动提交偏移量(offset)的consumer client,消费者TCP长连接到Broker拉取message。关于偏移量的概念很重要,可参考下面提供的参考文章有详细叙述。

参考文章

http://orchome.com/5 kafka入门介绍

http://orchome.com/451 kafka消费者客户端

http://kafka.apache.org/ kafka官网

https://blog.csdn.net/Damonhaus/article/details/54310868 查看kafka版本

猜你喜欢

转载自blog.csdn.net/fututadeyoushang/article/details/80941614