kafka安装和使用远程代码访问 --附踩坑记录

kafka安装和使用java连接远程服务器进行消息的生成与消费

首先要使用kafka,要有jdk和zookeeper的环境

本文在阿里云的centos7环境上进行

jdk版本选择的是1.8.0_181

zookeeper的版本是3.4.12

kafka的版本是2.12-1.1.1

关于kafka命令的介绍 本文不介绍了 只介绍怎么搭建一个kafka单点服务器 以及怎么使用代码 远程连接kafka服务器

下载地址

kafka下载地址 :http://kafka.apache.org/downloads

zookeeper下载地址:https://zookeeper.apache.org/

jdk下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

操作步骤

1、首先 使用tar命令对jdk进行解压
    tar -zxvf tar -zxvf jdk-8u181-linux-x64.tar.gz 
    目录下面会多出一个jdk1.8.0_181  进入里面去  使用pwd命令查看绝对路径  并且复制这个路径
    最后进行jdk环境变量的配置
    编辑 vim /etc/profile文件
    在文件后面加上:
    export JAVA_HOME=(刚才pwd命令看到的路径)
    export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/            lib/    tools.jar
    export PATH=$PATH:${JAVA_HOME}/bin
    
    最后使用source /etc/profile 刷新文件
    
    使用java -version 查看环境变量是否配置成功
    
2、成功之后进行zookeeper的安装
    
    使用 tar -zxvf zookeeper-3.4.12.tar.gz 接下下载好的zookeeper安装包
    
    将zookeeper下的/conf/zookeeper.example改名成zoo.cfg
    使用mv 和cp命令都可以  然后vim这个文件 加上下面两行
    dataLogDir=/tmp/zookeeper-log #日志路径
    quorumListenOnAllIPs=true #在阿里云的服务器上保证外网可以访问到  刚开始没设置这个折腾了好久
3、最后,安装kafka
    使用 tar -zxvf kafka_2.12-1.1.1.tgz 解压下载好的kafka
    cd 到解压后的文件里面去  编辑配置文件  vim config/server.properties
    加上下面几行
    listeners=PLAINTEXT://:9092
    advertised.host.name=阿里云服务器公网ip # 
    advertised.port=9092
    
    将zookeeper.connect的值改为阿里云的公网ip

至此,所有的环境的安装已经完成,下面使用kafka的命令进行消息的生成和消费

    首先cd到zookeeper的bin目录下  使用 ./zkServer.sh start 启动zookeeper
    再cd到kafka的bin目录下 使用 ./kafka-server-start.sh ../config/server.properties 启动kafka
    
    新建一个会话或者打开一个新的终端  
    这时候使用jps命令  可以看到 Kafka和QuorumPeerMain表示启动全部成功,下面创建一个主题
    cd到kafka的bin目录下面,执行
    ./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --     partitions 1 --topic Hello-world
    
    输出Created topic "Hello-world".  表示topic创建成功
    使用./kafka-topics.sh --list --zookeeper localhost:2181 查看主题的列表
    输出里面会含有Hello-world
    
    下面进行消息的生产和消费
    先启动生产者 ./kafka-console-producer.sh --broker-list 阿里云公网ip:9092 --topic Hello-        world
    会出现一个 >  类似于交互界面 这时候就可以生产消息了
    
    启动消费者 ./kafka-console-consumer.sh --zookeeper 阿里云公网ip:2181 --topic Hello-       world --from-beginning 
    
    这时候当生产者生产消息的时候  消费者这边就可以看到了  

在服务器上面进行消息的生产和消费就完成了 下面介绍怎么使用java代码进行远程连接kafka服务器

这个地方真的踩了好多好多坑、有次晚上下班搞到了快两点 百度、谷歌、维基、Stack Overflow 能找解决问题的地方都找了浪费了好多不必要的时间

    首先、新建一个Maven工程(此处不再多描述),在pom文件中加入kafka的依赖
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka_2.10</artifactId>
        <version>0.8.2.0</version>
    </dependency>
    
    新建一个KafkaProducerDemo和KafkaConsumerDemo类(名字可以自定义):
    话不多说  上代码
    
    KafkaProducerDemo类:
    
            public class KafkaProducerDemo {
                public static void main(String[] args) {
                    //创建properties文件
                    Properties properties = new Properties();
                    //设置kafka服务器地址
                   properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "阿里云公网ip:9092");
                   //设置key进行序列化
                   properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
                   //设置value进行序列化
                   properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
                   //创建消息生产者
                   KafkaProducer<String,String> producer = new KafkaProducer<>(properties);
                   //创建消息实体 制定主题、key、value
                   ProducerRecord<String,String> record = new ProducerRecord<>("Hello-world","haha","from java client");
                   //发送消息
                   producer.send(record);
                   System.out.println("消息发送成功");
                   //关闭生产者
                   producer.close();
            
                }
            }
        
        
    KafkaConsumerDemo类:
   
     public class KafkaConsumerDemo {
    
        public static void main(String[] args) {
            //新建配置文件
            Properties properties = new Properties();
            //设置kafka服务器地址
            properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,"阿里云公网ip:9092");
            //设置key的反序列化
            properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringDeserializer");
            //设置value的反序列化
            properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringDeserializer");
            //设置groupid
            properties.put(ConsumerConfig.GROUP_ID_CONFIG,"test");
    
            //创建消费者对象
            KafkaConsumer<String,String> consumer = new KafkaConsumer<>(properties);
            //订阅主题
            consumer.subscribe(Arrays.asList("Hello-world"));
    
            while (true) {
                //消费消息
                ConsumerRecords<String, String> records = consumer.poll(100);
                for (ConsumerRecord<String, String> record : records)
    
                    System.out.println("消息的主题是:" + record.topic()+",消息的key是:" + record.key()+",消息的value是:"+record.value());
            }
        }
    }
        
    
    
    
    上面就是连接kafka远程服务器代码

但是上述过程做完之后还是不能正确运行、这个地方折腾了好久、最后在哪里看到解决的办法记不大清了
就是要阿里云服务器服务安全设置里面加个规则 将2181和9092端口开放就可以,但是我中间也使用命令的方式关闭了防火墙、没什么用,不知道什么鬼。 搞得我头皮发麻

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,924评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,781评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,813评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,264评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,273评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,383评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,800评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,482评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,673评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,497评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,545评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,240评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,802评论 3 304
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,866评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,101评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,673评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,245评论 2 341

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,573评论 18 139
  • kafka集群部署以及java客户端测试 本文主要讲述本人的集群部署kafka过程以及遇到的问题: 其中:kafk...
    madfrog_hc阅读 869评论 0 2
  • 我想你时 你是一朵云 仿佛停在那里 却又飘忽不定 我看你时 你是一朵云 仿佛画在那里 却又模糊不清 我离你很近 在...
    佳木一方阅读 167评论 0 0
  • 如梦令·居酒屋三首【中华新韵】 其一 居酒屋中围坐, 一看,口舌生唾。 烤肉样繁多, 清酒杯杯喝过, 不错!不错!...
    沁园书社主人阅读 940评论 90 72
  • 在图书馆读到一篇朱自清先生的名为《背影》的文章,记得这是中学时,教科书中的一篇文章。此篇文章字数不多,寥寥数笔就为...
    张大意_阅读 346评论 0 1