转自:https://blog.csdn.net/yuan_xw/article/details/79188061

Kafka集群环境安装

相关下载

JDK要求1.8版本以上。

JDK安装教程:http://blog.csdn.net/yuan_xw/article/details/49948285

Zookeeper安装教程:http://blog.csdn.net/yuan_xw/article/details/47148401

Kafka下载地址:http://mirrors.shu.edu.cn/apache/kafka/1.0.0/kafka_2.11-1.0.0.tgz

Kafka集群规划

主机名 IP 安装软件
Kafka1 192.168.1.221 Jdk、Zookeeper、Kafka
Kafka2 192.168.1.222 Jdk、Zookeeper、Kafka
Kafka3 192.168.1.223 Jdk、Zookeeper、Kafka

配置ssh免密码登录:

产生密钥,执行命令:ssh-keygen -t rsa,按4回车,密钥文件位于\~/.ssh文件

在192.168.1.221上生产一对钥匙,将公钥拷贝到其他节点,包括自己,执行命令:

ssh-copy-id 192.168.1.221

ssh-copy-id 192.168.1.222

ssh-copy-id 192.168.1.223

在192.168.1.222上生产一对钥匙,将公钥拷贝到其他节点,包括自己,执行命令:

ssh-copy-id 192.168.1.221

ssh-copy-id 192.168.1.222

ssh-copy-id 192.168.1.223

在192.168.1.223上生产一对钥匙,将公钥拷贝到其他节点,包括自己,执行命令:

ssh-copy-id 192.168.1.221

ssh-copy-id 192.168.1.222

ssh-copy-id 192.168.1.223

在所有的服务器上设置环境变量:

export JAVA_HOME=/usr/local/software/jdk1.8.0_66
export CLASSPATH=.:$JAVA_HOME</span>/lib/dt.<span class="hljs-symbol">jar:</span><span class="hljs-variable">$JAVA_HOME/lib/tools.jar
export KAFKA_HOME=/usr/local/software/kafka_2.11-1.0.0
export ZOOKEEPER_HOME=/usr/local/software/zookeeper-3.4.11
export PATH=.:$JAVA_HOME</span>/<span class="hljs-symbol">bin:</span><span class="hljs-variable">$KAFKA_HOME/bin:$ZOOKEEPER_HOME</span>/<span class="hljs-symbol">bin:</span><span class="hljs-variable">$PATH

刷新环境变量:source /etc/profile

关闭所有服务器上的防火墙:

systemctl stop firewalld.service

systemctl disable firewalld.service

安装Kafka

1.分别在[Kafka1、Kafka2、Kafka3]服务器下载:

tar -zxvf kafka_2.11-1.0.0.tgz



2. 修改配置文件:

Kafka1服务器配置文件

broker.id=0

listeners=PLAINTEXT://:9092

log.dir= /usr/local/software/kafka_2.11-1.0.0/kafka-logs

Kafka2服务器配置文件

broker.id=1

listeners=PLAINTEXT://:9092

log.dir= /usr/local/software/kafka_2.11-1.0.0/kafka-logs

Kafka3服务器配置文件

broker.id=2

listeners=PLAINTEXT://:9092

log.dir= /usr/local/software/kafka_2.11-1.0.0/kafka-logs

  1. 分别启动[Kafka1、Kafka2、Kafka3]服务器的kafka服务

启动命令:./bin/kafka-server-start.sh -daemon config/server.properties

查看启动日志:tail -100f logs/server.log

查看启动端口:lsof -i:9092

创建主题Topic

创建主题topic

执行命令:bin/kafka-topics.sh - -create - -zookeeper 192.168.1.221:2181

- -replication-factor 2 - -partitions 2 - -topic test

查看主题topic描述

执行命令:bin/kafka-topics.sh –list –zookeeper 192.168.1.223:2181


查看创建的所有主题

执行命令:bin/kafka-topics.sh –list –zookeeper 192.168.1.223:2181

生产者生产消息

执行命令:bin/kafka-console-producer.sh –broker-list 192.168.1.221:9092 –topic test

消费者消费消息

执行命令:bin/kafka-console-consumer.sh –bootstrap-server 192.168.1.223:9092 –topic test –from-beginning

JAVA客户端

新建一个maven项目,项目名称:kafka-demo:

代码结构如下:

Maven的pom.xml文件:

<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.kafka</groupId>
<artifactId>kafka-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<packaging>jar</packaging> <name>kafka-demo</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients -->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</project>
  1. 生产者代码实现:
package com.kafka;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord; import java.util.Properties;
/**
* 生产者代码
*/
public classDemoProducer{
public static void main( String[] args ){
Properties props = new Properties();
props.put("bootstrap.servers", "192.168.1.221:9092,192.168.1.222:9092,192.168.1.223:9092");
props.put("acks", "all");
props.put("retries", 0);
props.put("batch.size", 16384);
props.put("linger.ms", 1);
props.put("buffer.memory", 33554432);
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); Producer<String, String> producer = new KafkaProducer<>(props);
for(int i = 0; i < 10; i++) {
producer.send(new ProducerRecord<>("test", Integer.toString(i), "message_value=====>" + i));
}
producer.close();
}
}


  1. 消费者代码实现:
package com.kafka;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer; import java.util.Arrays;
import java.util.Properties;
/**
* 消费者代码
*/
public classDemoConsumer {
public static void main(String[] args) {
Properties props = new Properties();
props.put("bootstrap.servers", "192.168.1.221:9092,192.168.1.222:9092,192.168.1.223:9092");
props.put("group.id", "test");
props.put("enable.auto.commit", "true");
props.put("auto.commit.interval.ms", "1000");
props.put("session.timeout.ms", "30000");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Arrays.asList("test"));
while(true) {
ConsumerRecords<String, String> records = consumer.poll(100);
for(ConsumerRecord<String, String> record : records) {
System.out.printf("offset = %d, key = %s, value = %s\n", record.offset(), record.key(), record.value());
}
}
}
}

消息结果:

message_value=====>1

message_value=====>5

message_value=====>7

message_value=====>8

message_value=====>4

message_value=====>6

message_value=====>0

message_value=====>2

message_value=====>3

message_value=====>9

源代码下载地址:http://download.csdn.net/download/yuan_xw/10228246

学习Kafka推荐书籍:

  1. 《Kafka入门与实践》

  2. 《Kafka技术内幕 图文详解Kafka源码设计与实现》

  3. 《流式架构:Kafka与MapR Streams数据流处理》

  4. 《Scala语言基础与开发实战》

  5. 《Kafka权威指南》

  6. 《Kafka源码解析与实战》

–以上为《Kafka集群环境安装》,如有不当之处请指出,我后续逐步完善更正,大家共同提高。谢谢大家对我的关注。——厚积薄发(yuanxw)

Kafka入门教程(二)的更多相关文章

  1. 无废话ExtJs 入门教程二十一[继承:Extend]

    无废话ExtJs 入门教程二十一[继承:Extend] extjs技术交流,欢迎加群(201926085) 在开发中,我们在使用视图组件时,经常要设置宽度,高度,标题等属性.而这些属性可以通过“继承” ...

  2. 无废话ExtJs 入门教程二十[数据交互:AJAX]

    无废话ExtJs 入门教程二十[数据交互:AJAX] extjs技术交流,欢迎加群(521711109) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C ...

  3. 无废话ExtJs 入门教程二[Hello World]

    无废话ExtJs 入门教程二[Hello World] extjs技术交流,欢迎加群(201926085) 我们在学校里学习任何一门语言都是从"Hello World"开始,这里我 ...

  4. mongodb入门教程二

    title: mongodb入门教程二 date: 2016-04-07 10:33:02 tags: --- 上一篇文章说了mongodb最基本的东西,这边博文就在深入一点,说一下mongo的一些高 ...

  5. SpringBoot入门教程(二)CentOS部署SpringBoot项目从0到1

    在之前的博文<详解intellij idea搭建SpringBoot>介绍了idea搭建SpringBoot的详细过程, 并在<CentOS安装Tomcat>中介绍了Tomca ...

  6. PySide——Python图形化界面入门教程(二)

    PySide——Python图形化界面入门教程(二) ——交互Widget和布局容器 ——Interactive Widgets and Layout Containers 翻译自:http://py ...

  7. Elasticsearch入门教程(二):Elasticsearch核心概念

    原文:Elasticsearch入门教程(二):Elasticsearch核心概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:ht ...

  8. RabbitMQ入门教程(二):简介和基本概念

    原文:RabbitMQ入门教程(二):简介和基本概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn ...

  9. JasperReports入门教程(二):中文打印

    JasperReports入门教程(二):中文打印 背景 在上一篇中我们介绍了JasperReport的基本入门,也展示了一个报表.但是我们的示例都是使用的英文,如果我们把需要打印的数据改为中文会怎么 ...

随机推荐

  1. 字符串压缩 牛客网 程序员面试金典 C++ Python

    字符串压缩 牛客网 程序员面试金典 C++ Python 题目描述 利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能.比如,字符串"aabcccccaaa"经压缩会变 ...

  2. TypeError: 'encoding' is an invalid keyword argument for this function 解决Python 2.7

    在python2.7中这样调用代码 open('file/name.txt','r',encoding= 'utf-8').read() 会出现 TypeError: 'encoding' is an ...

  3. Django 开发------django-crontab实现服务端的定时任务

    一.需求: 想实现类似 Linux 中crontab 的功能.定时执行计划任务. 二.配置: a.安装插件: # pip3 install django-crontab b.在settings.py ...

  4. 谷粒 | 18 | Hystrix熔断器

    Spring Cloud调用接口过程 Spring Cloud 在接口调用上,大致会经过如下几个组件配合: Feign ----->Hystrix ->Ribbon ->Http C ...

  5. 『与善仁』Appium基础 — 7、ADB Shell命令的使用

    目录 1.查看进程 2.查看实时资源占用情况 3.查看进程 UID 4.其它ADB Shell命令说明 Android系统是基于 Linux 内核的,也就是说Android系统的底层是Linux系统. ...

  6. 大爽Python入门教程 0-2 什么是IDE?python选什么IDE好?

    大爽Python入门公开课教案 点击查看教程总目录 一 感受IDE 什么是IDE? 在这里,我并不想直接给出一个回答, 因为这个回答对初学者来说,可能有些抽象. 我想先带大家感受下IDE. 1 比较不 ...

  7. Django 小实例S1 简易学生选课管理系统 6 实现登录逻辑

    Django 小实例S1 简易学生选课管理系统 第6节--实现登录逻辑 点击查看教程总目录 作者自我介绍:b站小UP主,时常直播编程+红警三,python1对1辅导老师. 1 业务逻辑 本教程第四节里 ...

  8. [loj574]黄金矿工

    记$dep_{x}$为1到$x$的边权和,当$x$上的矿工挖了$y$上的黄金时($y$在$x$子树内),显然$\sum_{e}c_{e}=dep_{y}-dep_{x}$ 由此,对于$u$上权值为$v ...

  9. [loj3247]Non-Decreasing Subsequences

    分治,考虑分治到[l,r]的区间(设$mid=(l+r)/2$),将询问分为两类:1.在左/右区间,直接递归下去:2.跨越中间,那么处理出两个数组:L[i][j]表示左区间在开头第i个位置,以数字j为 ...

  10. Lilypond+TexLive(LuaLatex+lyluatex)+VS Code实现谱文混排

    没想到发文章反而更难被预览了,那就复制一份到随笔里好了. 多次尝试之下,终于实现了现阶段谱文混排的最理想方式: 1. 综合Latex的排版(还有广泛适用人群)的优势以及Lilypond的美观优势: 2 ...