kafka环境搭建1-单机

kafka是基于scala语言开发,所以需要java运行环境,下载前请先确认是否已经安装并配置java环境

安装

tar -xzf kafka_2.11-0.9.0.0.tgz

 

配置访问地址:

config/server.properties

  • #内网地址:192.168.85.171
  • listeners=PLAINTEXT://192.168.85.171:9092
  • #外网地址:192.168.85.171
  • advertised.listeners=PLAINTEXT://192.168.85.171:9092

 

开放默认端口:

/sbin/iptables
/sbin/iptables -I INPUT -p tcp --dport 2181 -j ACCEPT

 

 

首先要进入kafka目录

  • 启动zookeeper server(kafka自带的zookeeper)

bin/zookeeper-server-start.sh config/zookeeper.properties &

注意 & 号的使用:命令结尾添加 & 号,可以在执行完命令后退出当前命令环境却不会结束进程

  • 启动kafka server

bin/kafka-server-start.sh config/server.properties &

创建主题

kafka生产和消费数据,必须基于主题topic。主题其实就是对消息的分类。

  • 创建主题:名称为“test”、复制数目为1、partitions为1的topic主题

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

replication-factor : 复制数目,提供failover机制;1代表只在一个broker上有数据记录,一般值都大于1,代表一份数据会自动同步到其他的多个broker,防止某个broker宕机后数据丢失。
partitions : 一个topic可以被切分成多个partitions,一个消费者可以消费多个partitions,但一个partitions只能被一个消费者消费,所以增加partitions可以增加消费者的吞吐量。kafka只保证一个partitions内的消息是有序的,多个一个partitions之间的数据是无序的。

  • 查看已经创建的主题

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

者和消

生产者产生(输入)数据,消费者消费(输出)数据

  • 启动生产者

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

启动后,在命令行下每输入一些字符串按下回车时,就作为一个消息并发送的kafka

  • 启动消费者

bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

启动消费者时,建议另开一个ssh窗口,方便一遍通过生产者命令行输入消息,一遍观察消费者消费的数据

当在生产者下输入消息并回车后,在消费者窗口下就能立即看到对应的消息,这就说明环境搭建成功。

Springboot +kafka

pom

<dependency>

   <groupId>org.springframework.kafka</groupId>

   <artifactId>spring-kafka</artifactId>

   <version>1.2.2.RELEASE</version>

</dependency>

application.properties

 

 

# kafka

spring.kafka.bootstrap-servers=192.168.85.171:9092

spring.kafka.consumer.group-id=group1

spring.kafka.consumer.auto-offset-reset=earliest

 

 

controller

 


 


package com.kaicom.nettytest.kafka;



import org.apache.kafka.clients.consumer.ConsumerRecord;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.SpringApplication;

import org.springframework.kafka.annotation.KafkaListener;

import org.springframework.kafka.core.KafkaTemplate;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.bind.annotation.RestController;



/**

 * @Author: BillYu

 * @Description:kafka连接测试

 * @Date: Created in 下午3:52 2018/6/4.

 */

@RestController

public class SampleController {

    private final Logger log = LoggerFactory.getLogger(SampleController.class);







    @Autowired

    private KafkaTemplate<String, String> template;



    @RequestMapping("/send")

    @ResponseBody

    String send(String topic, String key, String data) {

        template.send(topic, key, data);

        return "success";

    }







    @KafkaListener(id = "test", topics = "test")

    public void listenTest(ConsumerRecord<?, ?> cr) throws Exception {

        System.out.println("===>listen");

        log.info("{} - {} : {}", cr.topic(), cr.key(), cr.value());

    }









}

 

 

 

 

 

 

可视化监控安装

一、KafkaOffsetMonitor简述

KafkaOffsetMonitor是Kafka的一款客户端消费监控工具,用来实时监控Kafka服务的Consumer以及它们所在的Partition中的Offset,我们可以浏览当前的消费者组,并且每个Topic的所有Partition的消费情况都可以一目了然。

二、KafkaOffsetMonitor下载

KafkaOffsetMonitor托管在Github上,可以通过Github下载。
下载地址:https://github.com/quantifind/KafkaOffsetMonitor/releases

或者下载百度网盘:链接:https://pan.baidu.com/s/1geEBEvT 密码:jaeu

 

github提供下载的jar包应用了google网站提供的js文件,由于被墙的原因导致web界面无法访问。可以直接使用别人修改后的jar包,也可以从github上拉取源码然后修改打包。

kafka 镜像下载地址_spring

 

三、KafkaOffsetMonitor启动

将下载下来的KafkaOffsetMonitor jar包上传到linux上,可以新建一个目录KafkaMonitor,用于存放KafkaOffsetMonitor-assembly-0.2.0.jar进入到KafkaMonitor目录下,通过java编译命令来运行这个jar包:

kafka 镜像下载地址_zookeeper_02

[root@kafka50 KafkaMonitor]# java -cp KafkaOffsetMonitor-assembly-0.2.0.jar com.quantifind.kafka.offsetapp.OffsetGetterWeb --zk 10.0.0.50:12181,10.0.0.60:12181,10.0.0.70:12181 --port 8088  --refresh 5.seconds --retain 1.days


按回车后,可以看到控制台输出:


 


serving resources from: jar:file:/data/KafkaMonitor/KafkaOffsetMonitor-assembly-0.2.0.jar!/offsetapp
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
2018-01-05 21:17:36.267:INFO:oejs.Server:jetty-7.x.y-SNAPSHOT
log4j:WARN No appenders could be found for logger (org.I0Itec.zkclient.ZkConnection).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
2018-01-05 21:17:36.630:INFO:oejsh.ContextHandler:started o.e.j.s.ServletContextHandler{/,jar:file:/data/KafkaMonitor/KafkaOffsetMonitor-assembly-0.2.0.jar!/offsetapp}
2018-01-05 21:17:36.662:INFO:oejs.AbstractConnector:Started SocketConnector@0.0.0.0:8088

kafka 镜像下载地址_kafka 镜像下载地址_03

如果没有指定端口,则默认会开启一个随机端口。

kafka 镜像下载地址_kafka 镜像下载地址_04


参数说明:


 


zk :zookeeper主机地址,如果有多个,用逗号隔开
port :应用程序端口
refresh :应用程序在数据库中刷新和存储点的频率
retain :在db中保留多长时间
dbName :保存的数据库文件名,默认为offsetapp

kafka 镜像下载地址_spring_05

为了更方便的启动KafkaOffsetMonitor,可以写一个启动脚本来直接运行,我这里新建一个名为:kafka-monitor-start.sh的脚本,然后编辑这个脚本:

kafka 镜像下载地址_kafka_06

[root@kafka50 KafkaMonitor]# vim kafka-monitor-start.sh


java -Xms512M -Xmx512M -Xss1024K -XX:PermSize=256m -XX:MaxPermSize=512m  -cp KafkaOffsetMonitor-assembly-0.2.0.jar com.quantifind.kafka.offsetapp.OffsetGetterWeb \


--port 8088 \


--zk 10.0.0.50:12181,10.0.0.60:12181,10.0.0.70:12181 \


--refresh 5.minutes \


--retain 1.day >/dev/null 2>&1;


kafka 镜像下载地址_spring_07

然后退出保存即可,接下来修改一下kafka-monitor-start.sh的权限

[root@kafka50 KafkaMonitor]# chmod +x kafka-monitor-start.sh

启动KafkaOffsetMonitor:

[root@kafka50 KafkaMonitor]# nohup /data/KafkaMonitor/kafka-monitor-start.sh &
[1] 6551
[root@kafka50 KafkaMonitor]# lsof -i:8088
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    6552 root   16u  IPv6  26047      0t0  TCP *:radan-http (LISTEN)

四、KafkaOffsetMonitor Web UI

在游览器中输入:http://ip:port即可以查看KafkaOffsetMonitor Web UI,如下图: