阿伟开始搭建Kafka学习环境
概述
上一篇文章阿伟学习了Kafka的核心概念,并且把市面上流行的消息中间件特性进行了梳理和对比,方便大家在学习过程中进行对比学习,最后梳理了一些Kafka使用中经常遇到的Kafka难题以及解决思路,经过上一篇的学习我相信大家对Kafka有了初步的认识,本篇将继续学习Kafka。
一、安装和配置
学习一项技术首先要搭建一套服务,而Kafka的运行主要需要部署jdk、zookeeper、Kafka,Kafka是通过zookeeper来进行集群、broker、主题、分区等内容管理的。通过安装包的方式过于繁琐这里推荐使用docker容器的方式快速运行一套Kafka服务。
首先我们拉取zookeeper镜像并构建和运行容器:
docker pull zookeeper
docker run -itd --name zookeeper -p 2181:2181 zookeeper:latest
然后我们拉取Kafka镜像并构建和运行容器:
docker pull bitnami/kafka
docker run -d --name kafka -p 9092:9092 --link zookeeper:zookeeper --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 --env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.90.39:9092 --env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 --env KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 bitnami/kafka:latest
这样我们很快就运行了一套Kafka服务了,通常学习一项服务我们都想要一套可视化平台方便管理服务,这里我推荐一块可视化工具,部署方式如下:
docker pull nickzurich/efak:latest
docker run -d --name kafka-eagle -p 8048:8048 -e EFAK_CLUSTER_ZK_LIST="192.168.90.39:2181" nickzurich/efak:latest
访问地址 ip:8048,默认账号和密码Account:admin ,Password:123456,登录界面如下:
二、准备学习Kafka的demo工程
这里选择springboot集成Kafka的方式来搭建学习demo工程,搭建了一个消费者和一个生产者工程,方便后续学习Kafka的一些特性:
我们需要引入如下依赖:
<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency>
生产者工程实现如下:
配置文件
spring: kafka: producer: bootstrap-servers: 192.168.90.39:9092 key-serializer: org.apache.kafka.common.serialization.StringSerializer value-serializer: org.apache.kafka.common.serialization.StringSerializer
发送消息的关键代码如下:
@Autowired private KafkaTemplate<String, String> kafkaTemplate; public String sendMessage(String message) { logger.info(String.format("#### -> Producing message -> %s", message)); this.kafkaTemplate.send(TOPIC, message); return message; }
消费者工程实现如下:
配置文件
spring: kafka: consumer: bootstrap-servers: 192.168.90.39:9092 group-id: group_id auto-offset-reset: earliest key-deserializer: org.apache.kafka.common.serialization.StringDeserializer value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
消费消息的关键代码如下:
@Service public class Consumer { @KafkaListener(topics = "users", groupId = "group_id") public void consume(String message) throws IOException { log.info(String.format("#### -> Consumed message -> %s", message)); } }
通过上面的基础案例用户在学习的过程中可以继续扩展,从而学习Kafka其他的特性。
总结
本文内容比较基础主要给大家提供了一个Kafka学习环境搭建的教程。