Windows下 IDEA操作远程Linux服务器下Kafka服务

                                 Windows下 IDEA操作远程Linux服务器下Kafka服务

1 修改Kafka配置文件config/server.properties 

     主要修改以下三个参数,listeners和host.name写上kafka broker主机的地址 这个地址不配置会造成远程无法访问

     zookeeper.connect=localhost:2181

     listeners=PLAINTEXT://10.190.188.188:9092

     host.name=10.190.188.188

2 启动Kafka服务

    (1)启动zookeeper   zkServer.sh  start

    (2)启动kafaka         kafka-server-start.sh config/server.properties  --daemon

3 使用命令行验证Kafka正常工作

产看Topic列表

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

创建主题

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

启动主题的发送者

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

    启动简单的主题接受者

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

查看主题的信息

kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic

4 使用IDEA编写JAVA程序

图工程目录

生产者程序

import java.io.Serializable;

public class StockQuotationinfo implements Serializable {

    public static final long serialVersionUID = 1L;
    /*股票代码*/
    public String stockCode;
    /**
     * 股票名称
     */
    public String stockName;
    /**
     * 交易时间
     */
    public long tradeTime;
    /**
     * 昨日 t&盘价
     */
    public float preClosePrice;
    /**
     * 开盘价
     */
    public float openPrice;
    /**
     * 当前价,收盘时即为当日收盘价
     */
    public float currentPrice;
    /*今日最高价 */
    public float highPrice;
    /*今日棋低价*/
    private float lowPrice;

    @Override
    public String toString() {
        return this.stockCode + " ! " + stockName + " | " + tradeTime + " ! " + preClosePrice
                + "|" + openPrice + " | " + currentPrice + "| " + highPrice + " | " + lowPrice;
    }

    public String getStockCode() {
        return stockCode;
    }

    public void setStockCode(String stockCode) {
        this.stockCode = stockCode;
    }

    public String getStockName() {
        return stockName;
    }

    public void setStockName(String stockName) {
        this.stockName = stockName;
    }

    public long getTradeTime() {
        return tradeTime;
    }

    public void setTradeTime(long tradeTime) {
        this.tradeTime = tradeTime;
    }

    public float getPreClosePrice() {
        return preClosePrice;
    }

    public void setPreClosePrice(float preClosePrice) {
        this.preClosePrice = preClosePrice;
    }

    public float getOpenPrice() {
        return openPrice;
    }

    public void setOpenPrice(float openPrice) {
        this.openPrice = openPrice;
    }

    public float getCurrentPrice() {
        return currentPrice;
    }

    public void setCurrentPrice(float currentPrice) {
        this.currentPrice = currentPrice;
    }

    public float getHighPrice() {
        return highPrice;
    }

    public void setHighPrice(float highPrice) {
        this.highPrice = highPrice;
    }

    public float getLowPrice() {
        return lowPrice;
    }

    public void setLowPrice(float lowPrice) {
        this.lowPrice = lowPrice;
    }
}
import org.apache.kafka.clients.producer.*;
import org.apache.kafka.common.serialization.StringSerializer;
import org.apache.log4j.Logger;

import java.text.DecimalFormat;
import java.util.Properties;
import java.util.Random;

public class QuotationProducer {

    private static final Logger LOG = Logger.getLogger(QuotationProducer.class);
    /*"设置实例生产消息的总数*/
    private static final int    MSG_SIZE = 100;
    /*主题名称*/
    private static final String TOPIC = "stock-quotation";
    /*" Kafka 集群的地址如果有多个地址使用逗号分隔,可以写多个不需要把所有集群Broker全写出*/
    private static final String BROKER_LIST = "10.190.188.188:9092";
    private static KafkaProducer<String, String> producer = null;

    static {
        //构造用于实例化 KafkaProducer 的 Properties 信息
        Properties configs = initConfiq();
        //初始化一个 KafkaProducer  连接Kafka服务器
        producer = new KafkaProducer<String, String>(configs);
    }

    /*初始化 Kafka 配置
     * @return
     */
    private static Properties initConfiq() {
        Properties properties = new Properties();
        //Kafka broker 列表
        properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, BROKER_LIST);
        //设置Key和Value的序列化类
        properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
        properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
        return properties;
    }
    /*生产股票行情信息
     * @return
     */
    private static StockQuotationinfo createQuotationinfo() {
        StockQuotationinfo quotationinfo = new StockQuotationinfo();
        //随机产生 l 到 10 之间的整数,然后与 600100 相加组成股票代码
        Random r = new Random();
        Integer stockCode = 600100 + r.nextInt(10);
        //随机产生一个 0 到 1 之间的浮点数
        float random = (float) Math.random();
        //设置涨跌规则
        if (random / 2 < 0.5) {
            random = -random;
        }
        DecimalFormat decimalFormat = new DecimalFormat(".00"); //设置保存两位有效数字
        quotationinfo.setCurrentPrice(Float.valueOf(decimalFormat.format(11 + random))); // 设置最新价在 l l 元浮动
        quotationinfo.setPreClosePrice(11.80f);
        // 设置昨日收盘价为固定值
        quotationinfo.setOpenPrice(11.5f);
        // 设置开盘价
        quotationinfo.setLowPrice(10.5f);
        // 设置最低价,并不考虑 10 屯 限制,
        //以及当前价是否已是最低价6.2 生俨者 API 应用 229
        quotationinfo.setHighPrice(12.5f);
        //设置最高价 , 并不考虑 10宅限制 ,
        //以及当前价是否已是最高价
        quotationinfo.setStockCode(stockCode.toString());
        quotationinfo.setTradeTime(System.currentTimeMillis());
        quotationinfo.setStockName("股票-" + stockCode);
        return quotationinfo;
    }

    //使用 ProducerRecord 发送消息
    public static void main(String[] args) {
        ProducerRecord<String, String> record = null;
        StockQuotationinfo quotationinfo = null;
        try {
            int num = 0;
            for (int i = 0; i < MSG_SIZE; i++) {
                quotationinfo = createQuotationinfo();
                LOG.info("发出一条消息"+quotationinfo.toString());
                record = new ProducerRecord<String, String>(TOPIC, 0, quotationinfo.getStockCode(), quotationinfo.toString());
                producer.send(record); //异步发送消息

                //异步发送添加回调函数,展示信息
                producer.send(record,new Callback()
                {
                    @Override
                    public void onCompletion(RecordMetadata metadata, Exception exception) {
                        if(metadata!=null)
                           System.out.println("message send to partition " + metadata.partition() + ", offset: " + metadata.offset());
                        else  if(exception!=null)
                            System.out.println(exception.fillInStackTrace());
                    }
                });
                if (num++ % 10 == 0) {
                    Thread.sleep(2000L);
                }
            }
        } catch (InterruptedException e) {
            LOG.error(" Send message occurs exception", e);
        } finally {
            producer.close();
        }
    }

}

消费者

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 class ConsumerDemo {
    public static void main(String[] args) {
        Properties props = new Properties();
        props.put("bootstrap.servers", "10.190.188.188:9092");
        props.put("group.id", "test-consumer-group");
        props.put("enable.auto.commit", "true");//偏移量自动提交
        props.put("auto.commit.interval.ms", "1000");
        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<String, String>(props);
        consumer.subscribe(Arrays.asList("test"));//设置主题,可多个
        while (true) {
            ConsumerRecords<String, String> records = consumer.poll(1000);
            for (ConsumerRecord<String, String> record : records)
                System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
        }
    }
}

  

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于在Linux服务器上使用Kafka,下面是一些基本的步骤和注意事项: 1. 安装Java:Kafka是用Java编写的,所以在安装Kafka之前,确保您的服务器上已经安装了Java运行环境。 2. 下载和安装Kafka:您可以从Apache Kafka的官方网站(https://kafka.apache.org/downloads)上下载Kafka的二进制文件。解压缩下载的文件,并将其放置在您喜欢的位置。 3. 配置Kafka:进入Kafka的安装目录,并编辑`config/server.properties`文件。在该文件中,您可以配置Kafka的各种参数,如监听端口、日志位置、ZooKeeper连接等。 4. 启动ZooKeeper:Kafka使用ZooKeeper来管理集群元数据和协调器状态。在启动Kafka之前,您需要先启动一个ZooKeeper实例。 5. 启动Kafka Broker:在启动Kafka之前,确保您已经设置正确的配置,并且ZooKeeper已经在运行。然后,使用以下命令启动Kafka Broker: ``` bin/kafka-server-start.sh config/server.properties ``` 6. 创建Topic:使用以下命令创建一个新的Topic: ``` bin/kafka-topics.sh --create --topic myTopic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1 ``` 这将创建一个名为`myTopic`的Topic,其中包含一个分区和一个副本。 7. 发布和消费消息:使用以下命令来发布和消费消息: - 发布消息: ``` bin/kafka-console-producer.sh --topic myTopic --bootstrap-server localhost:9092 ``` - 消费消息: ``` bin/kafka-console-consumer.sh --topic myTopic --bootstrap-server localhost:9092 --from-beginning ``` 这些是使用Kafka的基本步骤。您还可以通过在`config/server.properties`文件中更改其他配置来对Kafka进行进一步的自定义。 希望这些信息对您有所帮助!如有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值