KafKa(下载,安装,简单使用教程)
一、安装zookeeper
1、下载zookeeper
下载路径:http://mirrors.hust.edu.cn/apache/zookeeper/
版本选择 apache-zookeeper-3.7.0-bin,bin里边的文件内容比较全,否则有可能出现“找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain”新版本zookeeper易犯错误
2、解压文件
解压文件至目录 D:\MyFolder\SoftWare\Zookeeper\Instail
3、进入Zookeeper设置目录更新配置文件
- 在D:\MyForder\SoftWare\Zookeeper\Instail\apache-zookeeper-3.7.0-bin目录下创建data,和log文件夹
- conf目录下复制“zoo_sample.cfg”重命名为“zoo.cfg”,打开文件,编辑:
dataDir=D:\\MyForder\\SoftWare\\Zookeeper\\Instail\\apache-zookeeper-3.7.0-bin\\data
dataLogDir=D:\\MyForder\\SoftWare\\Zookeeper\\Instail\\apache-zookeeper-3.7.0-bin\\log
4、修改zookeeper端口(我这边改成2222),可不修改,默认2181
5、启动zookeeper
测试是否启动成功:
点击zkCli.cmd,如果出现以上字样则表示启动成功
二、安装kafKa
1、下载安装包
下载地址:http://kafka.apache.org/downloads.html
版本选择2.12-2.8.1
2、解压文件
解压文件至目录D:\Kafka\kafka_2.12-2.8.1(kafka安装目录不要放的太深,否则有可能在cmd中执行启动命令时候报指令符太长的错误)
在D:\Kafka\kafka_2.12-2.8.1\config目录下打开打开server.properties
- 编辑:log.dirs=D:\\Kafka\\kafkalogs(此目录需要自己创建,此目录的作用是记录kafka日志)
- 编辑:zookeeper.connect=localhost:2222(2222对应zookeeper设置端口)
3)修改Kafka端口(我这边不做修改),可不修改,默认9092
4、运行Kafka
打开dos窗口,将当前目录切换至=D:\Kafka\kafka_2.12-2.8.1\bin\windows
执行命令kafka-server-start.bat ../../config/server.properties
执行命令前保证zookeeper已正常运行
三、简单使用案例
1、创建springboot项目:
引入pom依赖:
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
application.yml配置:
server:
port: 8081
servlet:
context-path: /framedemo
kafka:
bootstrap-servers: kafka's-ip:9092
#=============== provider =======================
producer:
retries: 0
# 每次批量发送消息的数量
batch-size: 16384
buffer-memory: 33554432
# 指定消息key和消息体的编解码方式,StringSerializer支持Json对象的序列化
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
#=============== consumer =======================
# 指定默认消费者group id
consumer:
group-id: test-consumer-group
auto-offset-reset: earliest
enable-auto-commit: true
auto-commit-interval: 100
# 指定消息key和消息体的编解码方式,StringDeserializer支持Json对象的反序列化
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
配置类:
@Configuration
public class KafkaInitialConfiguration {
// 创建一个名为testtopic的Topic并设置分区数为8,分区副本数为2
@Bean
public NewTopic initialTopic() {
return new NewTopic("testtopic",8, (short) 1 );
}
// 如果要修改分区数,只需修改配置值重启项目即可
// 修改分区数并不会导致数据的丢失,但是分区数只能增大不能减小
/**
@Bean
public NewTopic updateTopic() {
return new NewTopic("testtopic",10, (short) 2 );
}
**/
}
消息提供者:
@RestController
@RequestMapping("/KafkaProducer")
public class KafkaProducerController {
@Autowired
private KafkaTemplate<String,Object> kafkaTemplate;
// 发送消息
@RequestMapping("/normal")
public void sendMessage1() {
String normalMessage="my test";
kafkaTemplate.send("topic1", normalMessage);
}
}
消息消费者:
@Component
public class KafkaConsumer {
// 消费监听
@KafkaListener(groupId = "test-consumer-group",topics = {"topic1"})
public void onMessage1(ConsumerRecord<?, ?> record){
// 消费的哪个topic、partition的消息,打印出消息内容
System.out.println("简单消费:"+record.topic()+"-"+record.partition()+"-"+record.value());
}
}