win10下安装kafka

注:kafka依赖于zookeeper,官网下载的kafka内置了zookeeper依赖。

1. 下载Kafka

网址:http://kafka.apache.org/


解压缩:

spring kafka 与 kafka server版本对应_kafka


spring kafka 与 kafka server版本对应_zookeeper_02

2. 修改配置文件

进入到config目录,修改service.properties:

spring kafka 与 kafka server版本对应_kafka_03

broker.id设置:https://cloud.tencent.com/developer/news/378568


更改为自行创建的文件夹

spring kafka 与 kafka server版本对应_java_04

3. 进行单机实例测试简单使用

(1) 启动kafka内置的zookeeper

运行cmd命令:
.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties

spring kafka 与 kafka server版本对应_spring_05

不关闭当前窗口。

(2) 启动kafka服务

运行cmd命令:
.\bin\windows\kafka-server-start.bat .\config\server.properties

spring kafka 与 kafka server版本对应_java_06

不关闭当前窗口。

(3) 创建一个名为test1的topic测试主题kafka

运行cmd命令:
.\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test1

spring kafka 与 kafka server版本对应_java_07

该窗口可关闭。

(4) 创建消息生产者生产消息

运行cmd命令:
.\bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic test1

spring kafka 与 kafka server版本对应_zookeeper_08

不关闭当前窗口。

(5) 创建消息消费者接收消息

运行cmd命令:
.\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test1 --from-beginning

spring kafka 与 kafka server版本对应_java_09

不关闭当前窗口。

(6) 测试消息发送和接收

spring kafka 与 kafka server版本对应_spring_10

测试成功。



## 常用命令:

删除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中新建项目

spring kafka 与 kafka server版本对应_spring_11

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、项目结构

spring kafka 与 kafka server版本对应_java_12

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、查看控制台能看到消费者信息

spring kafka 与 kafka server版本对应_java_13

查看cmd窗口信息:

spring kafka 与 kafka server版本对应_java_14

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: