一、下载安装
首先访问Kafka官网(Apache Kafka)选择版本下载,笔者下载的是 kafka_2.13-2.6.0.tgz 。kafka的运行需要Jdk topic的发布和订阅依赖zookeeper,因此新版kafka安装程序已经将zookeeper整合在一起降低了安装复杂度。下载完成后在服务器上选择一个目录(笔者选择的是/opt目录,此为linux用户级程序目录,相当于D:\program)解压kafka,不须编译只要修改配置文件中的几个必要项后即可运行。
二、配置启动
运行kafka前只需要配置zookeeper.properties和server.properties这两个配置文件,进入opt/kafka_2.13-2.6.0/config目录找到二者文件。
(1)配置zookeeper
首先配置zookeeper,使用vi命令仅需要配置dataDir和clientport即可。
- dataDir=/opt/kafka_2.13-2.6.0/zookeeper-data # zookeeper 数据目录
- clientPort=2181 #zookeeper连接端口
(2)配置kafka
在server.properties中需要配置:
- zookeeper.connect=localhost:2181 # zookeeper地址如未做修改默认即可
- advertised.listeners=PLAINTEXT://47.104.101.255:9092 #kafka对外提供地址
- log.dirs=/opt/kafka_2.13-2.6.0/kafka-logs # 日志目录
(3)启动kafka
启动kafka是有先后顺序的,首先需要启动zookeeper,然后再启动kafka才能正确运行。
- zookeeper 前台启动命令:bin/zookeeper-server-start.sh config/zookeeper.properties
- zookeeper 后台启动命令:bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
- kafka前台启动命令:bin/kafka-server-start.sh config/server.properties
- kafka后台启动命令:bin/kafka-server-start.sh -daemon config/server.properties
三、测试运行
kafka启动后可通过在线创建生成者和消费者来测试kafka安装是否正确。
(1)创建主题
bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 4 --replication-factor 1
- --create # 创建主题
- --topic # 后跟主题名称
- --bootstrap-server #后跟kafka IP和端口
- --partitions #分区数
- --replication-factor #副本数
(2)创建生成者
bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092
- --topic # 后跟主题
- --bootstrap-server # 后跟kafka IP和端口
(3)创建消费者
bin/kafka-console-consumer.sh --bootstrap-server=localhost:9092 --topic test-topic --consumer-property group.id=test_group1
- --bootstrap-server # 后跟kafka IP和端口
- --topic # 后跟主题名称
- --consumer-property group.id # 消费者组ID,同一组可创建多个消费者,同一条消息只能被消费组中的一个消费者消费
(4)常用命令
- 查看主题:bin/kafka-topics.sh --zookeeper localhost:2181 --list
- 修改分区:bin/kafka-topics.sh --alter --topic test-n --bootstrap-server localhost:9092 --partitions 4
- 查看分区:bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic test-topic
- 删除主题:bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic test-topic (
server.properties中配置delete.topic.enable=true)
- 关闭kafka:bin/kafka-server-stop.sh
- 关闭zookeeper:bin/zookeeper-server-stop.sh
四、集成程序
(1)引入依赖
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
(2)配置yml
spring:
kafka:
bootstrap-servers: localhost:9092
consumer:
enable-auto-commit: true
group-id: test_group1
auto-offset-reset: latest
listener:
concurrency: 10
(3)程序代码
package css.com.cn.tjfx.kafka;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class KafkaConsumer {
@KafkaListener(topics = {"CW_OCEAN_RECORD_CAPTURE_FLOW"})
public void receive(String message) {
JSONObject jsonObject = JSON.parseObject(message);
String deviceId = jsonObject.get("deviceId").toString();
String deviceName = jsonObject.get("deviceName").toString();
log.debug("来了一条消息: deviceId=" + deviceId + "deviceName=" + deviceName);
}
}