Loading

kafka 搭建以及 kafka收集log

  1. 首先搭建kafka和zookeeper,找帖子
    搭建时需要注意

    其次,保证zookeeper是集群环境,也可以代建伪集群,不然启动不起来报:
    partitions have leader brokers without a matching listener。
  2. 一个生产者的消息如果没有key值,则会随机到每个分区,
    搭建时出了个问题,因为kafka配置文件默认partition为1,所以在我本地两个消费者始终有一个消费者消费不到消息,
    后面改完配置文件分区设置2个,but 没起作用,依然只有一个消费者能消费到消息

    各种查。。。网上也是都在说topic会发送到不同的partition,不同的partition会对应不同的消费者,吴国。。。
    后面在生产者新建一个topic_b 然后好了,看来是一个topic在生成时就会有一些操作来对应partition,后面在查阅。

  3. 卡夫卡是真的。测试几万条数据/嗖嗖就消费完了/
  4. kafka充当消息中间件
    利用spring boot
    pom.xml
            <dependency>
                <groupId>org.springframework.kafka</groupId>
                <artifactId>spring-kafka</artifactId>
            </dependency>

    application.yml

      kafka:
        bootstrap-servers: ip:9093,ip:9094,ip:9095
        consumer:
          group-id:  consumer-default
          auto-commit-interval: 100
          auto-offset-reset: earliest
          enable-auto-commit: true
          key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
          value-deserializer: org.apache.kafka.common.serialization.StringDeserializer

    如果是单机kafka 则配置一个即可
    a.生产者:

        @Autowired
        private KafkaTemplate kafkaTemplate;
    
        ....
    
        kafkaTemplate.send("topic_name","message");
        

    b.消费者:

    @Component
    public class KafkaCustomer {
       private static int count = 0;
       @KafkaListener(topics = {"topic_a"})
       public void listen (ConsumerRecord<?, ?> record) throws Exception {
           System.out.printf("topic = %s, offset = %d, value = %s \n", record.topic(), record.offset(), record.value());
       }
    }

    期间遇到的问题上述已解释哈/

  5. kafka 充当日志收集
    默认使用logback(springboot自带)
    上配置主要配置logback-spring.xml即可,利用springboot搭建的消费者即可看到kafka的收集的日志。
    有一个问题哈/为什么用kafka收集呢?是优势,更大的优势可能是可以由不同的消费者,来分析日志。
    问题在于原先本人搭建过ELK收集日志,后来网上说logstash太消耗本地内存,后用filebeat来收集,
    logstash来解析日志,现在就是filebeat和kafka的区别和优势又有哪些,笔记一下,后续查阅。
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration  scan="true" scanPeriod="60 seconds" debug="false">
        <contextName>logback</contextName>
        <logger name="org.apache.kafka" level="OFF"/>
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>D:\log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>logback.%d{yyyy-MM-dd}.log</fileNamePattern>
            </rollingPolicy>
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
        <appender name="KafkaAppender" class="com.github.danielwegener.logback.kafka.KafkaAppender">
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
            <topic>loges</topic>
            <keyingStrategy class="com.github.danielwegener.logback.kafka.keying.HostNameKeyingStrategy" />
            <deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy" />
            <producerConfig>bootstrap.servers=ip:9093,ip:9094,ip:9095</producerConfig>
        </appender>
        <logger name="Application_ERROR">
            <appender-ref ref="KafkaAppender"/>
        </logger>
        <root level="debug">
            <appender-ref ref="console" />
            <appender-ref ref="file" />
            <appender-ref ref="KafkaAppender" />
        </root>
    </configuration>

    期间的问题:问题如下放, 一开始将日志级别设置成info没有问题发生,但当把级别设成debug时,就卡住不动了,
    这个问题我认为主要是由于org.apache.kafka这个包底下有用到log.debug()方法,但项目加载到log.xml时log还为起作用,导致log.xml调用log.debug()时报错进而导则timeout。

    解决方法,将org.apache.kafka报下的日志关闭,即:<logger name="org.apache.kafka" level="OFF"/>,即可解决下方的错误。

    22:25:40.199 logback [main] DEBUG o.a.k.clients.producer.KafkaProducer - [Producer clientId=producer-1] Exception occurred during message send:
    org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.

  6. 会继续更新。
posted @ 2019-07-14 23:33  ichar  阅读(9610)  评论(1编辑  收藏  举报