win10下安装kafka
注:kafka依赖于zookeeper,官网下载的kafka内置了zookeeper依赖。
1. 下载Kafka
网址:http://kafka.apache.org/
解压缩:
2. 修改配置文件
进入到config目录,修改service.properties:
broker.id设置:https://cloud.tencent.com/developer/news/378568
更改为自行创建的文件夹
3. 进行单机实例测试简单使用
(1) 启动kafka内置的zookeeper
运行cmd命令:
.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties
不关闭当前窗口。
(2) 启动kafka服务
运行cmd命令:
.\bin\windows\kafka-server-start.bat .\config\server.properties
不关闭当前窗口。
(3) 创建一个名为test1的topic测试主题kafka
运行cmd命令:
.\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test1
该窗口可关闭。
(4) 创建消息生产者生产消息
运行cmd命令:
.\bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic test1
不关闭当前窗口。
(5) 创建消息消费者接收消息
运行cmd命令:
.\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test1 --from-beginning
不关闭当前窗口。
(6) 测试消息发送和接收
测试成功。
## 常用命令:
删除topic:
彻底删除Kafka中的topic
1、删除kafka存储目录(server.properties文件log.dirs配置,默认为"/tmp/kafka-logs")相关topic目录
2、Kafka 删除topic的命令是:
./bin/kafka-topics --delete --zookeeper 【zookeeper server】 --topic 【topic name】
如果kafaka启动时加载的配置文件中server.properties没有配置delete.topic.enable=true,那么此时的删除并不是真正的删除,而是把topic标记为:marked for deletion
你可以通过命令
.\bin\windows\kafka-topics.bat --list --zookeeper localhost:2181
来查看所有topic
此时你若想真正删除它,可以如下操作:
(1)登录zookeeper客户端:命令:./bin/zookeeper-client
(2)找到topic所在的目录:ls /brokers/topics
(3)找到要删除的topic,执行命令:rmr /brokers/topics/【topic name】即可,此时topic被彻底删除。
另外被标记为marked for deletion的topic你可以在zookeeper客户端中通过命令获得:ls /admin/delete_topics/【topic name】,
如果你删除了此处的topic,那么marked for deletion 标记消失
zookeeper 的config中也有有关topic的信息: ls /config/topics/【topic name】暂时不知道有什么用
总结:
彻底删除topic:
1、删除kafka存储目录(server.properties文件log.dirs配置,默认为"/tmp/kafka-logs")相关topic目录
2、如果配置了delete.topic.enable=true直接通过命令删除,如果命令删除不掉,直接通过zookeeper-client 删除掉broker下的topic即可。
基本概念:
- kafka是伪集群,因为虚拟机有限,zookeeper也是集群
- dubbo是微服务,微小的服务,如果并发量不是太高,上千万,上亿级别的或者想要返回结果的可以用dubbo
- kafka是消息队列,如果想提高吞吐量,不要返回结果(返回结果可以放在redis里)就可以用它
- 不过上面的两种一般都有,当进行服务降级或者服务熔断时消息队列就大有用处
Kafka是一个分布式的消息存储系统,提供了四大核心接口:
1.Producer API允许了应用可以向Kafka中的topics发布消息;
2.Consumer API允许了应用可以订阅Kafka中的topics,并消费消息;
3.Streams API允许应用可以作为消息流的处理者,比如可以从topicA中消费消息,处理的结果发布到topicB中;
4.Connector API提供Kafka与现有的应用或系统适配功能,比如与数据库连接器可以捕获表结构的变化;
Topic —> 每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic. Producer —> 负责发布消息到Kafka
broker. Consumer —> 消息消费者,向Kafka broker读取消息的客户端.
更多请查看官网:http://kafka.apachecn.org/
spring boot整合kafka
PS:当前demo是基于注解实现
1、请保持zookeeper、kafka服务启动中
2、eclipse中新建项目
3、pom文件如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
4、配置文件application.yml如下:
spring:
kafka:
bootstrap-servers: 127.0.0.1:9092 #指定kafka server的地址,集群配多个,中间,逗号隔开
producer:
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
consumer:
group-id: default_consumer_group #群组ID
enable-auto-commit: true
auto-commit-interval: 1000
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
server:
port: 8500
5、项目结构
6、生产者代码参考:
@RestController
public class ProducerController {
@Autowired
private KafkaTemplate<String, Object> kafkaTemplate;
@RequestMapping("message/send")
public String send(String msg) {
kafkaTemplate.send("test1", msg); // 使用kafka模板发送信息
return "success";
}
}
7、消费者代码参考:
/**
* 监听服务器上的kafka是否有相关的消息发过来
*
* @author DELL
*
*/
@Component
public class ConsumerDemo {
/**
* 定义此消费者接收topics = "test1"的消息,与controller中的topic对应上即可
*
* @param record 变量代表消息本身,可以通过ConsumerRecord<?,?>类型的record变量来打印接收的消息的各种信息
*/
@KafkaListener(topics = "test1")
public void listen(ConsumerRecord<?, ?> record) {
System.out.printf("topic is %s, offset is %d, value is %s \n", record.topic(), record.offset(), record.value());
}
}
8、启动项目,页面访问生产者方法
http://localhost:8500/message/send?msg=test
9、查看控制台能看到消费者信息
查看cmd窗口信息:
Spring Boot项目整合ELK、Kafka
使用Spring Boot整合log4j,配合ELK(Elasticsearch , Logstash, Kibana)整合Kafka完成日志收集,应用场景比较多的是分布式项目,这样可以直接收集各个节点的日志到一起,便于错误日志查看和分析业务。
整个流程如下:
使用log4j的appender发送数据到kafka到topic,topic再发送到logstash,然后经过elasticsearch分析处理后到kibana页面做查询展示。
环境准备:
1、安装ELK
2、安装kafka
3、Spring Boot项目搭建
简要步骤:
①、修改logj配置文件
②、加入日志打印代码
③、启动项目访问页面
④、使用kafka查看消费者打印
⑤、使用kibana建立日志索引
⑥、使用kibana查询日志、es语法查询
参考1: