centos7安装kafka单机版,并Springboot2整合kafka2.2运行

不懂kafka的可以看理论学习以下再来:https://blog.csdn.net/qq_39276448/article/details/86024940

要先安装jdk

切记

新手不安装zk安装kafka移步:https://www.cnblogs.com/adolfmc/p/7345333.html 

安装zk单机版安装kafka下文

集成boot移步骤二。

步骤一:安装kafka

版本对应springboot2.1+--kafka2.2

              springboot2.0+--kafka2.1

博主是2.1,所以其他版本要自己找了。

已经有linux经验的请先看官方:http://kafka.apache.org/quickstart

下载kafka

cd ~ 切到当前用户home目录

wget http://mirror.bit.edu.cn/apache/kafka/2.2.0/kafka_2.12-2.2.0.tgz

解压

tar -zxvf kafka_2.12-2.2.0.tgz

新建立一个文件夹:kafka 把解压后的kafka_2.12-2.2.0文件夹放进去,并在kafka目录下创建logs文件夹

修改配置文件

vim /usr/local/kafka/kafka_2.11-2.1.0/config/server.properties

外网访问问题配置

Cannot assign requested这个问题也是这样配置

初级工程师不要去学网上的配置port,和hostname;你会发现绝对性的失败,添加这两行!!!!

(2020/2/22修正:host.name/port已过时,PLAINTEXT:明文传输

外部连接要求:明文传输(不需加密协议),任意机器访问本机,访问本机的端口:listeners=PLAINTEXT://0.0.0.0:9092 
对外发布地址:advertised.listeners=PLAINTEXT://你自己的外网地址:9092

配置kafka存在zk的节点
配置borkr.id=0,因为zk为0,单机zk默认0就行了。(默认就ok)   

如图:

修改日志文件地址

路径是你刚刚创建logs文件夹的地址

切换到bin目录下

启动zook单机节点 后台启动&

sh zookeeper-server-start.sh  ../config/zookeeper.properties & 这里配置文件路径。写你自己的

启动kafka

sh kafka-server-start.sh ../config/server.properties &  这里配置文件路径。写你自己的

测试:

建立topic

sh kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

查看kafka内所有topic

sh kafka-topics.sh --list --zookeeper localhost:2181

如果看到test说明成功!

其他测试请自便

步骤一.1:服务器空闲内存2G以上的请忽略,注意是空闲(很多博客忽略了)

1G空闲的注意内存分配问题,不熟的要改以下配置:要不然内存不够用,kafka默认1G,zk默认512M

修改原则最好(伪\静\态分配):kafka-jvm申请最大内存+zk申请最大内存<空闲内存(推荐)

或者是业务不大的时候(动态分配):kafka-jvm申请最小内存+zk申请最小内存<空闲内存

博主服务器大概内存为闲时为700M,忙时500M,zk256+kakfa-jvm256<700 勉强够。。只是玩玩也不需要很高内存

修改bin目录下:

设置内存看自己服务器空闲内存而定

1.vim zookeeper-server-start.sh 

export KAFKA_HEAP_OPTS="-Xmx256M -Xms20M"   

2.vim kafka-server-start.sh

export KAFKA_HEAP_OPTS="-Xmx256M -Xms128M"

3.切换到config目录 (很多博客忽略了)

vim server.properties

加上

log.cleaner.dedupe.buffer.size=10485760 单位是字节(10M)

上面三个最大内存加起来不能超过空闲内存!

 

注意:(高手请跳过)

博主服务器动态分配内存:全部最大内存可能都要4G.....实际我只有1G

可以支撑单服务某时刻某服务能使用更高,省服务器,前提所有服务不能同时使用很高!

重点:

背景:博主服务器大概内存为闲时为700M,忙时500M

补充:kafka内部还申请了内存默认128m

场景:kafka有时候能行,有时候无缘无故duang机.重启又没事了(或者是某个服务无缘无故duang机)

这是主要可能发生duang服务原因之一

1.闲时内存:

博主的其他服务没有太高使用(redis,tomcat),此时服务器空闲内存为700M

kafka,zk没有太高使用率那么全部jvm内存大概使用为20+128+128=276M

那还剩下700-276=424M,

那么服务器正常运行

2.忙时内存

博主的其他服务先使用特别频繁(redis,tomcat),此时服务器空闲内存为500M

kafka,zk使用率很高那么全部jvm内存大概使用为256+256+128=640M,

其他内存占用情况不列举:排列分组同理问题

明显内存不够了!那么zk或者kafka就会报内存分配错误了,就duang服务了

如果重启短时间内kakfa又能运行一段时间,超过空闲内存时又会duang服务了

如果不能对内存很好的把控,就一定要按照伪\静\态分配内存!

反之无所谓!

步骤二:springboot2整合kafka

依赖包

<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>

</dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
    </dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

yml

server:
  port: 11000
spring:
  kafka:
    producer:
      batch-size: 16384
      retries: 0
      buffer-memory: 33554432
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
    bootstrap-servers: 你的服务器外网地址:9092
    consumer:
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      group-id: test-consumer-group
      auto-offset-reset: earliest
      auto-commit-interval: 100
      enable-auto-commit: true
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer

编写接口

package com.bj.kafka.Kafka;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;
import java.util.UUID;

@RestController
public class KafkaController {

    private Gson gson = new GsonBuilder().create();
    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    @RequestMapping("/send")
    public String send(String name) {
        Message message = new Message();
        message.setId(System.currentTimeMillis());
        message.setMsg(name);
        message.setSendTime(new Date());
        System.out.println("+++++++++++++++++++++  message = {}"+ gson.toJson(message));
//这里发送到那个消息topic(xiaobaii),并设置发送的数据
        kafkaTemplate.send("xiaobaii", gson.toJson(message));
        return name;
    }

}

编写message类

package com.bj.kafka.Kafka;

import lombok.Data;

import java.util.Date;

@Data
public class Message {
    private Long id;    //id

    private String msg; //消息

    private Date sendTime;  //时间戳

}

编写消费端

package com.bj.kafka.Kafka;

import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

import java.util.Optional;

@Component
public class MyConsumer {
    //这里便是监听了xiaobaii,只要程序不停止就会持续消费!
    @KafkaListener(topics = "xiaobaii")
    public void listen(ConsumerRecord<?,String> record) {
        Optional<?> kafkaMessage = Optional.ofNullable(record.value());

        if (kafkaMessage.isPresent()) {

            Object message = kafkaMessage.get();

           System.out.println(message);
        }
    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值