Kafka(7):生产者详解

7 篇文章 0 订阅
订阅专栏

1 消息发送

1.1 Kafka Java客户端数据生产流程解析

1 首先要构造一个 ProducerRecord 对象,该对象可以声明主题Topic、分区Partition、键 Key以及值 Value,主题和值是必须要声明的,分区和键可以不用指定。

2 调用send() 方法进行消息发送。

3 因为消息要到网络上进行传输,所以必须进行序列化,序列化器的作用就是把消息的 key value对象序列化成字节数组。

4 接下来数据传到分区器,如果之间的 ProducerRecord 对象指定了分区,那么分区器将不再做任何事,直接把指定的分区返回;如果没有,那么分区器会根据 Key 来选择一个分区,选择好分区之后,生产者就知道该往哪个主题和分区发送记录了。

5 接着这条记录会被添加到一个记录批次里面,这个批次里所有的消息会被发送到相同的主题和分区。会有一个独立的线程来把这些记录批次发送到相应的 Broker 上。

6 Broker成功接收到消息,表示发送成功,返回消息的元数据(包括主题和分区信息以及记录在分区里的偏移量)。发送失败,可以选择重试或者直接抛出异常。

依赖的包 <kafka.version>2.0.0</kafka.version>

        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka_${scala.version}</artifactId>
            <version>${kafka.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

1.2 必要参数配置

package com.example.demo.demo2;

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.common.serialization.StringSerializer;

import java.util.Properties;

/**
 * Kafka消息生产者进一步分析
 */

public class KafkaProducerAnalysis {
    private static final String brokerList = "192.168.222.130:9092,192.168.222.131:9092,192.168.222.132:9092";
    private static final String topic = "heima";

    public static Properties initConfig() {
        Properties props = new Properties();
        // 该属性指定 brokers 的地址清单,格式为 host:port。清单里不需要包含所有的 broker 地址,
        // 生产者会从给定的 broker 里查找到其它 broker 的信息。——建议至少提供两个 broker 的信息,因为一旦其中一个宕机,生产者仍然能够连接到集群上。
        props.put("bootstrap.servers", brokerList);
        // 将 key 转换为字节数组的配置,必须设定为一个实现了 org.apache.kafka.common.serialization.Serializer 接口的类,
        // 生产者会用这个类把键对象序列化为字节数组。
        // ——kafka 默认提供了 StringSerializer和 IntegerSerializer、ByteArraySerializer。当然也可以自定义序列化器。
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        // 和 key.serializer 一样,用于 value 的序列化
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        // 用来设定KafkaProducer对应的客户端ID,默认为空,如果不设置KafkaProducer会自动生成一个非空字符串。
        // 内容形式如:"producer-1"
        props.put("client.id", "producer.client.id.demo");
        return props;
    }

    public static Properties initNewConfig() {
        Properties props = new Properties();
        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, brokerList);
        props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
                "org.apache.kafka.common.serialization.StringSerializer");
        props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
                "org.apache.kafka.common.serialization.StringSerializer");
        props.put(ProducerConfig.CLIENT_ID_CONFIG, "producer.client.id.demo");

        // 自定义分区器的使用
        //props.put(ProducerConfig.PARTITIONER_CLASS_CONFIG,DefinePartitioner.class.getName());

        // 自定义拦截器使用
        props.put(ProducerConfig.INTERCEPTOR_CLASSES_CONFIG,ProducerInterceptorPrefix.class.getName());
        props.put(ProducerConfig.ACKS_CONFIG,0);
        return props;
    }

    public static Properties initPerferConfig() {
        Properties props = new Properties();
        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, brokerList);
        props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
                StringSerializer.class.getName());
        props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
                StringSerializer.class.getName());
        return props;
    }

    public static void main(String[] args) throws InterruptedException {
        Properties props = initNewConfig();
        KafkaProducer<String, String> producer = new KafkaProducer<>(props);

//        KafkaProducer<String, String> producer = new KafkaProducer<>(props,
//                new StringSerializer(), new StringSerializer());
        //生成 ProducerRecord 对象,并制定 Topic,key 以及 value
        ProducerRecord<String, String> record = new ProducerRecord<>(topic, "Kafka-demo-001", "hello, Kafka!");
        try {
            // 1、发送消息
            producer.send(record);

            // 2、同步发送
            //通过send()发送完消息后返回一个Future对象,然后调用Future对象的get()方法等待kafka响应
            //如果kafka正常响应,返回一个RecordMetadata对象,该对象存储消息的偏移量
            // 如果kafka发生错误,无法正常响应,就会抛出异常,我们便可以进行异常处理
            //producer.send(record).get();

            // 3、异步发送
//            producer.send(record, new Callback() {
//                @Override
//                public void onCompletion(RecordMetadata metadata, Exception exception) {
//                    if (exception == null) {
//                        System.out.println(metadata.partition() + ":" + metadata.offset());
//                    }
//                }
//            });
        } catch (Exception e) {
            e.printStackTrace();
        }
        producer.close();
//        TimeUnit.SECONDS.sleep(5);
    }
}

1.3 发送类型

发送即忘记

producer.send(record)

同步发送

//通过send()发送完消息后返回一个Future对象,然后调用Future对象的get()方法等待kafka响应
//如果kafka正常响应,返回一个RecordMetadata对象,该对象存储消息的偏移量
// 如果kafka发生错误,无法正常响应,就会抛出异常,我们便可以进行异常处理
producer.send(record).get();

异步发送

            producer.send(record, new Callback() {
                public void onCompletion(RecordMetadata metadata, Exception exception) {
                    if (exception == null) {
                        System.out.println(metadata.partition() + ":" + metadata.offset());
                    }
                }
            });

1.4 序列化器

消息要到网络上进行传输,必须进行序列化,而序列化器的作用就是如此。

Kafka提供了默认的字符串序列化器(org.apache.kafka.common.serialization.StringSerializer),还有整型(IntegerSerializer)和字节数组(BytesSerializer)序列化器,这些序列化器都实现了接口(org.apache.kafka.common.serialization.Serializer)基本上能够满足大部分场景的需求。

1.5 自定义序列化器

未完待续

kafka 生产者和消费者实例
雪水
09-27 1万+
一、环境安装配置 1、去官网下载kafka 我下载的版本是 kafka_2.11-0.10.0.1.tgz,下面的实例也是基于该版本。 2、解压安装 tar -xzf kafka_2.11-0.10.0.1.tgz mv kafka_2.11-0.10.0.1 /root 3、修改配置文件 cd /root/kafka_2.11-0.10.0.1/config cp serve
kafka生产者回调的使用
wjlzx的博客
11-27 1万+
前言:今天看到有人说kafka生产者在发送消息后,如果发生异常,异常捕获方法里拿不到消息的数据,我想了想,感觉不太对劲,所以验证了一下。 首先说下结论:kafka是不会在生产者发送消息的回调中,把发送的消息再一次返回回来的,因为这些消息我们可以自己记录,没必要浪费网络资源。 kafka-client的回调方法 kafka原生的kafka-client包中,生产者发送回调方法如下,其中Rec...
Kafka消费者生产者实例
热门推荐
rhwayfun专栏
07-30 3万+
为了更为直观展示Kafka的消息生产消费的过程,我会从基于Console和基于Application两个方面介绍使用实例。Kafka是一个分布式流处理平台,具体来说有三层含义: 它允许发布和订阅记录流,类似于消息队列或企业消息传递系统。 它可以容错的方式存储记录流。 它可以处理记录发生时的流。 由于主要介绍如何使用Kafka快速构建生产者消费者实例,所以不会涉及Kafka内部的原理。一个基于Kafk
Kafka生产者详解
Zeroowt的博客
08-12 810
生成者概述 生成者是负责向Kafka发送消息的应用程序,通常应用于:记录用户的活动、物联网硬件数据的写入、保存日志消息和缓存即将写入到数据库的数据等。 生成者向Kafka发送消息的主要步骤如下: 创建一个ProducerRecord对象,包含目标主题、内容以及键和分区信息。在发送ProducerRecord对象时,生成者要先把键和值对象序列化成字节数组。 下一步,数据被发送分区器,如果没有指定分区,那么分区器就会根据ProducerRecord对象的键来选择一个分区。然后该数据会被发送到对应主题分区的批次
Kafka入门及生产者详解
weixin_46628668的博客
03-09 1297
传统定义:分布式的、基于发布/订阅模式的消息队列,主要用于大数据实时处理领域。发布/订阅模式中,发布者不会直接将消息发送给特定的订阅者,而是将发布的消息分为不同的类别,订阅者只接受感兴趣的消息。官网最新定义:开源的分布式事件流平台(Event Streaming Platform),用于高性能数据管道、流分析、数据集成。
kafka生产者配置参数详解
zhangmuqiang的博客
01-29 1458
然而,在某些场景下,即使处于可接受的负载下,客户端也希望能减少请求的数量。如果生产者客户端发送的消息较大或者发送的频率较高,那么需要将max.request.size参数设置得大一些,以减少每批发送消息的数量,提高吞吐量。如果生产者客户端发送的消息较小或者发送的频率较低,那么可以将max.request.size参数设置得小一些,以避免一次性发送过多的消息导致内存占用过高。一般来说,如果Kafka集群的可用性较高,网络延迟较小,可以将max.block.ms参数设置得小一些,以减少阻塞等待的时间。
Kafka:Kafka详解
qq_55630615的博客
07-14 994
一个分布式流媒体平台,类似于消息队列或企业消息传递系统。
Kafka生产者Producer详解
qq_43745578的博客
01-23 2228
详细讲解kafka生产者
Kafka生产者详解
mxk4869的博客
07-11 1953
Kafka生产者详解
Kafka技术内幕:图文详解Kafka源码设计与实现+书签.pdf+源码
12-02
1. **发布/订阅模型**:Kafka采用发布/订阅模型,生产者发布消息到主题(Topic),消费者则订阅这些主题以接收消息。每个主题可以被分成多个分区(Partition),保证了消息的顺序性和高可用性。 2. **分区与副本**...
Kafka技术内幕:图文详解Kafka源码设计与实现
01-23
1. **Kafka架构**:Kafka集群由 brokers(节点)、producers(生产者)、consumers(消费者)和topics(主题)组成。生产者负责发布消息到主题,消费者则订阅并消费这些消息。brokers存储主题的数据,并负责消息的...
Kafka生产者详解(很细)
08-07
### Kafka生产者详解 #### 一、生产者发送消息的过程 Kafka生产者发送消息的过程主要包括以下几个步骤: 1. **消息封装**:首先,生产者将待发送的消息封装成`ProducerRecord`对象,该对象中包含了目标主题(topic...
深入解析Kafka源码:生产与消费模型详解
首先,我们从Kafka生产者源码入手,理解其如何与服务器交互,通过ProducerRequest和ProducerResponse发送消息,并确保数据的有效传递。生产者负责将消息发送到特定的分区(Partition),并可能涉及主题(Topic)的...
Kafka 为什么要抛弃 Zookeeper?
m0_54369189的博客
10-16 463
本文,我们分析了为什么 Kafka 要移除 ZooKeeper,主要原因有两个:ZooKeeper不能满足 Kafka的发展以及 Kafka想创建自己的生态。在面临越来越复杂的数据流处理需求时,KRaft 模式为 Kafka 提供了一种更高效、简洁的架构方案。不论结局如何,Kafka 和 ZooKeeper曾经也度过了一段美好的蜜月期,祝福 Kafka 在 KRaft模式越来越强大,为使用者带来更好的体验。
@KafkaListener注解
jifgnie的博客
10-17 385
在 Spring Boot 中,使用 @KafkaListener 注解消费 Kafka 消息时,如果 service.save(cleanWikiSource) 抛出异常,消息不会被认为已经成功消费完毕。如果 service.save(cleanWikiSource) 抛出异常,Kafka 会自动将消息标记为未成功消费,并会重新尝试交付此消息(即消息会被重新消费)。如果配置了 max.poll.interval.ms 或 max.poll.records 等参数,可以控制消费者重试间隔和次数。
shell案例之一键部署kafka
2301_82330629的博客
10-16 1543
echo "下载地址:https://archive.apache.org/dist/kafka/$kafka_version/kafka_$scala_version-$kafka_version.tgz"echo "kafka_$scala_version-$kafka_version.tgz下载失败,请重试或手动下载到/tmp目录下再次执行"echo "/tmp/kafka_$scala_version-$kafka_version.tgz解压失败,请查看异常信息后重试"
Kafka异常重试方案小记
最新发布
做从未做的事,叫成长;做不愿做的事,叫改变;做不敢做的事,叫突破。
10-20 1283
此外,我们增加了一个Web端的手动重推功能,以便于在需要时手动触发消息的重新处理,若后续异常消息多时可以考虑自动的定时调度。为了进一步增强异常处理能力,我们可以通过自行编码,在消费异常时将相关信息写入日志,或者在消费后立即写入消息,待后续消费成功后再更新其状态。为了解决重平衡期间可能出现的消息丢失问题,我们计划引入JVM钩子,在发版时对当前工作线程池中的消息进行快照,并在后续重新推送这些消息。而在kafka中原本并无死信队列的概念,所以当需要自行封装这一层概念的时候,就可以脱离既定思维的约束,
如何利用kafka实现高效数据同步?
oOBubbleX的博客
10-15 925
在我们之前的文章有详细介绍过Kafka的结构、特点和处理方式。具备告诉处理能力的kafka被利用在数据同步和数据传输上,今天来说下kafka是怎么实现高效的数据同步和传输。
Kafka、Zookeeper、Redis、MySQL和Elasticsearch(ES)鉴权配置
weixin_46356409的博客
10-16 832
确保这些服务的鉴权机制启用是非常重要的,可以通过检查配置文件、查看日志和使用命令行工具来确认。如果发现没有启用鉴权机制,建议尽快配置以确保服务的安全性。配置文件的具体路径可能会因容器镜像的不同而有所变化,建议参考具体镜像的文档或Dockerfile。
写文章

热门文章

  • RabbitMQ连接报错(1)—— None of the specified endpoints were reachable 35238
  • Sql server 千万级大数据SQL查询优化 21134
  • 【docker】bash: rpm: command not found 20933
  • SQL SERVER 2012 版本升级图解 16213
  • SQL生成序号的四种方式 15368

分类专栏

  • hive 付费 33篇
  • 区块链 付费 12篇
  • drools 付费 10篇
  • TiDB 付费 9篇
  • HBase 付费 20篇
  • kettle 付费 16篇
  • Doris 付费 25篇
  • Kubernetes 付费 12篇
  • Lucene 付费 12篇
  • Mycat 付费 20篇
  • Skywalking 付费 13篇
  • SpringCloud 付费 38篇
  • 分布式 付费 20篇
  • Redis 付费 28篇
  • Mysql 付费 53篇
  • SpringBoot 付费 92篇
  • java面试题 51篇
  • 水利管理信息化 7篇
  • 数据库面试题 6篇
  • 信创 5篇
  • python面试题
  • 表达式合集 1篇
  • GraphQL 9篇
  • 前端面试题 2篇
  • 数据治理 6篇
  • 大数据面试题 2篇
  • 系统架构 2篇
  • Zepplin
  • 云原生
  • 产品经理 2篇
  • Git 3篇
  • 数据结构 7篇
  • 东方通TongLINK/Q 5篇
  • 密码技术 1篇
  • 数据仓库 2篇
  • FineBI 26篇
  • 数字孪生
  • 东方通TongWeb 1篇
  • PowerBI
  • 等保分保 4篇
  • spring 3篇
  • RPC 6篇
  • TensorFlow 3篇
  • Sharding-Jdbc 6篇
  • Tair 5篇
  • Swagger 5篇
  • Easy Rules
  • Scrapy
  • 人工智能 8篇
  • ChatGPT 1篇
  • WEBGL 5篇
  • Cat 7篇
  • ip2region 1篇
  • Apache Phoenix 2篇
  • EMQ X 3篇
  • Apache Kylin
  • Disruptor框架 2篇
  • Apache Impala 1篇
  • MQTT 3篇
  • jieba分词 2篇
  • Apache Atlas 1篇
  • Solr 5篇
  • kong 7篇
  • progresql
  • Apache Pulsar
  • Canal 4篇
  • DataX 6篇
  • FRR 1篇
  • lxc 2篇
  • Elastic-Job分布式任务调度 4篇
  • OpenResty 5篇
  • twemproxy 1篇
  • lua 3篇
  • Oozie 6篇
  • Hue 6篇
  • Superset 5篇
  • POI 3篇
  • netty 1篇
  • CouchDB 1篇
  • HAProxy
  • Apache Openoffice 2篇
  • ruby on rails 1篇
  • neo4j 4篇
  • ffmpeg
  • qrcode 3篇
  • dwr 3篇
  • nexus 1篇
  • Linux 53篇
  • Prometheus 4篇
  • Freemarker 2篇
  • Hadoop 14篇
  • 虚拟机 3篇
  • Apache Flume 6篇
  • 单点登录 7篇
  • Kingbase 4篇
  • IntelliJ IDEA 4篇
  • javascript 27篇
  • java 78篇
  • HTML 5篇
  • CSS 5篇
  • zookeeper 11篇
  • 人大金仓 1篇
  • vue.js 9篇
  • Apusic 2篇
  • MyBatis 11篇
  • Activiti工作流 4篇
  • 达梦数据库 1篇
  • docker 19篇
  • JVM 14篇
  • SpringMVC 7篇
  • Tomcat 7篇
  • Apollo 2篇
  • oracle 2篇
  • Elastic Stack 10篇
  • dubbo 8篇
  • kafka 7篇
  • Maven 5篇
  • Servlet 1篇
  • 消息队列 1篇
  • Undertow 1篇
  • 微信小程序 3篇
  • shiro
  • FastDFS 6篇
  • 人员定位算法 2篇
  • 设计模式 9篇
  • SpringData
  • MongoDB 3篇
  • Nginx 7篇
  • .Net 56篇
  • VS2017 2篇
  • 系统运维 34篇
  • jquery 15篇
  • 微信开发 3篇
  • Flex 18篇
  • SVN 4篇
  • 百度地图 1篇
  • python 51篇
  • IOS 10篇
  • SQL 6篇
  • 数据库设计 2篇
  • cordova 1篇
  • SQL SERVER 1篇
  • RabbitMQ 16篇
  • Echars 1篇
  • Cesium.js 5篇
  • three.js 3篇

最新评论

  • Java:实现RSA加密与验证的方法详解

    阿J~: 大佬,一给我嘞giao

  • Java:实现RSA加密与验证的方法详解

    穷苦书生_万事愁: 博主的文章《Java:实现RSA加密与验证的方法详解》深入浅出地介绍了RSA加密与验证的方法,让我对这个主题有了全新的认识。文章中的细节描写非常到位,让我感受到了博主的深厚功底和对技术的热爱。期待博主未来能够持续分享更多这样有价值、有深度的好文,同时也希望能够得到博主的指导,共同进步。非常感谢博主的分享和支持!

  • java面试题:简化URL

    穷苦书生_万事愁: 博主的这篇文章真的让我眼前一亮,对java面试题:简化URL的讲解非常深入,让我对这个主题的理解有了全新的认识。文章中的细节描述非常到位,让我感受到了博主深厚的技术功底和丰富的经验。期待博主未来能够持续分享更多类似的好文,同时也希望能够得到博主的指导,共同进步。非常感谢博主的无私分享和支持!

  • MySQL:某个ip连接mysql失败次数过多,导致ip锁定

    夜晚的猿猴: 8.0以上的 TRUNCATE TABLE performance_schema.host_cache

  • Spring Boot(七十六):集成Redisson实现布隆过滤器(Bloom Filter)

    sunsheng1985: 这玩意支持Redis集群吗

最新文章

  • Spring Boot(八十九):集成encache
  • javascript:冻结对象
  • javascript:监听浏览器页签切换
2024
10月 1篇
09月 4篇
08月 21篇
07月 40篇
06月 40篇
05月 29篇
04月 7篇
03月 22篇
02月 19篇
01月 79篇
2023年399篇
2022年141篇
2021年67篇
2020年231篇
2019年10篇
2018年45篇
2017年73篇

目录

目录

分类专栏

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不死鸟.亚历山大.狼崽子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

玻璃钢生产厂家襄阳动物玻璃钢雕塑制作太原公园玻璃钢雕塑生产厂家嘉祥玻璃钢小品雕塑湖州玻璃钢海豚雕塑玻璃钢葡萄卡通雕塑广东节庆商场美陈报价南京玻璃钢雕塑加工厂家芒市玻璃钢雕塑设计哪里有卖淮安商场美陈费用福州玻璃钢雕塑报价嵩明玻璃钢雕塑河南超市商场美陈供应商玻璃钢雕塑的成本多少?河北省玻璃钢雕塑厂家供应德州玻璃钢浮雕景观雕塑玻璃钢雕塑制造厂海口商场美陈询问报价通州玻璃钢花盆花器漳州玻璃钢花盆厂家徐州逼真玻璃钢座椅雕塑新密太湖石玻璃钢雕塑人物玻璃钢雕塑哪家比较好常用玻璃钢花盆有哪些创意玻璃钢雕塑厂家货真价实玻璃钢卡通雕塑价格实惠镇江公园玻璃钢花盆新密玻璃钢雕塑报价池州多彩玻璃钢雕塑批发焦作室内玻璃钢仿铜雕塑厂家福建装饰商场美陈市场报价香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化