一、Kafka是什么?
Kafka 是一个分布式流媒体平台,类似于消息队列或企业消息传递系统。
Kafka官网
二、消息中间件对比
特性 | ActiveMQ | RabbitMQ | RocketMQ | Kafka |
---|---|---|---|---|
开发语言 | java | erlang | java | scala |
单机吞吐量 | 万级 | 万级 | 10万级 | 100万级 |
时效性 | ms | us | ms | ms以内 |
可用性 | 高(主从) | 高(主从) | 非常高(分布式) | 非常高(分布式) |
功能特性 | 成熟的产品、较安全的文档、各种协议支持好 | 并发能力强、性能好、延迟低 | MQ功能比较完善,扩张性佳 | 只支持主要的MQ功能,主要用于大数据领域 |
2.消息中间件对比-选择建议
消息中间件 | 建议 |
---|---|
kafka | 追求高吞吐量,适合产生大量数据的互联网服务的数据收集业务 |
RocketMQ | 可靠性要求很高的金融互联网领域,稳定性高,经历多次阿里双十一考验 |
RabbitMQ | 性能较好,社区活跃度高,数据量没那么大,优先悬着功能比较完善的RabbitMQ |
三、kafka安装和配置
kafka对于zookeeper是强依赖,保存kafka相关的节点数据,所以安装kafka之前必须包装zookeeper
- Docker安装zookeeper
- 下载镜像
docker pull zookeeper:3.4.14
- 创建容器
docker run -d --name zookeeper -p 2181:2181 zookeeper:3.4.14
- Docker安装kafka
- 下载镜像
docker pull wurstmeister/kafka:2.12-2.3.1
- 创建容器
docker run -d --name kafka \ --env KAFKA_ADVERTISED_HOST_NAME=192.168.200.130 \ --env KAFKA_ZOOKEEPER_CONNECT=192.168.200.130:2181 \ --env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.200.130:9092 \ --env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \ --env KAFKA_HEAP_OPTS="-Xmx256M -Xms256M" \ --net=host wurstmeister/kafka:2.12-2.3.1
四、kafka入门
- 生产者发送消息
- 导入kafka客户端依赖
<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> </dependency>
- 编写消息生产者类ProducerQuickstart
-
设置kafka的配置信息
properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"192.168.200.130:9092"); //消息key的序列化器 properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringSerializer"); //消息value的序列化器 properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringSerializer");
-
创建生产者对象
KafkaProducer<String,String> producer = new KafkaProducer<String, String>(properties);
-
发送消息
ProducerRecord<String,String> record = new ProducerRecord<String,String>(“topic","key",“value"); producer.send(record);
-
关闭消息通道
producer.close();
-
- 消费者接收消息
- 编写消息生产者类ProducerQuickstart
- 设置kafka的配置信息
//连接信息 properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,"192.168.200.130:9092"); //指定消费者组 properties.put(ConsumerConfig.GROUP_ID_CONFIG,"group2"); //反序列化的key和value properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringDeserializer"); properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringDeserializer");
- 创建消费者对象
KafkaConsumer<String,String> consumer = new KafkaConsumer<String,String>(properties);
- 订阅主题
consumer.subscribe(Collections.singletonList("itcast-001"));
- 获取消息
ConsumerRecords<String, String> consumerRecords = consumer.poll(Duration.ofMillis(1000));
- 设置kafka的配置信息
- 编写消息生产者类ProducerQuickstart
总结
以上就是今天要讲的内容,本文仅仅简单介绍了kafka的使用,而kafka提供了还有更多的功能待你发现