diff --git a/internal/datanode/data_sync_service.go b/internal/datanode/data_sync_service.go
index 6804969e1e1c895e04eb663ee703ed7d1c4a60ea..5feea28439f3f555710b36ce8908577f32b9e2b9 100644
--- a/internal/datanode/data_sync_service.go
+++ b/internal/datanode/data_sync_service.go
@@ -87,7 +87,7 @@ func (dsService *dataSyncService) initNodes(vchanPair *datapb.VchannelPair) {
 	var ddStreamNode Node = newDDInputNode(dsService.ctx, dsService.msFactory, vchanPair.GetDdlVchannelName(), vchanPair.GetDdlPosition())
 
 	var filterDmNode Node = newFilteredDmNode()
-	var ddNode Node = newDDNode(dsService.ctx, dsService.flushChan, dsService.replica, dsService.idAllocator)
+	var ddNode Node = newDDNode(dsService.ctx, dsService.flushChan, dsService.replica, dsService.idAllocator, vchanPair.CollectionID)
 	var insertBufferNode Node = newInsertBufferNode(dsService.ctx, dsService.replica, dsService.msFactory, dsService.idAllocator)
 	var gcNode Node = newGCNode(dsService.replica)
 
diff --git a/internal/datanode/flow_graph_dd_node.go b/internal/datanode/flow_graph_dd_node.go
index e77d05a94fa4976d01cd2c0c1e187b5b6fcf2738..099d956eb518a42793e23b373d7159d97ce391e8 100644
--- a/internal/datanode/flow_graph_dd_node.go
+++ b/internal/datanode/flow_graph_dd_node.go
@@ -26,7 +26,6 @@ import (
 	miniokv "github.com/milvus-io/milvus/internal/kv/minio"
 	"github.com/milvus-io/milvus/internal/log"
 	"github.com/milvus-io/milvus/internal/msgstream"
-	"github.com/milvus-io/milvus/internal/proto/commonpb"
 	"github.com/milvus-io/milvus/internal/proto/datapb"
 	"github.com/milvus-io/milvus/internal/proto/schemapb"
 	"github.com/milvus-io/milvus/internal/storage"
@@ -46,6 +45,8 @@ type ddNode struct {
 
 	kv      kv.BaseKV
 	replica Replica
+
+	collectionID UniqueID
 }
 
 type ddData struct {
@@ -85,6 +86,10 @@ func (ddNode *ddNode) Operate(in []flowgraph.Msg) []flowgraph.Msg {
 		// TODO: add error handling
 	}
 
+	if len(in) == 0 {
+		return []flowgraph.Msg{}
+	}
+
 	msMsg, ok := in[0].(*MsgStreamMsg)
 	if !ok {
 		log.Error("type assertion failed for MsgStreamMsg")
@@ -122,15 +127,27 @@ func (ddNode *ddNode) Operate(in []flowgraph.Msg) []flowgraph.Msg {
 
 	// do dd tasks
 	for _, msg := range tsMessages {
-		switch msg.Type() {
-		case commonpb.MsgType_CreateCollection:
-			ddNode.createCollection(msg.(*msgstream.CreateCollectionMsg))
-		case commonpb.MsgType_DropCollection:
-			ddNode.dropCollection(msg.(*msgstream.DropCollectionMsg))
-		case commonpb.MsgType_CreatePartition:
-			ddNode.createPartition(msg.(*msgstream.CreatePartitionMsg))
-		case commonpb.MsgType_DropPartition:
-			ddNode.dropPartition(msg.(*msgstream.DropPartitionMsg))
+		switch msg := msg.(type) {
+		case *msgstream.CreateCollectionMsg:
+			if msg.CollectionID != ddNode.collectionID {
+				continue
+			}
+			ddNode.createCollection(msg)
+		case *msgstream.DropCollectionMsg:
+			if msg.CollectionID != ddNode.collectionID {
+				continue
+			}
+			ddNode.dropCollection(msg)
+		case *msgstream.CreatePartitionMsg:
+			if msg.CollectionID != ddNode.collectionID {
+				continue
+			}
+			ddNode.createPartition(msg)
+		case *msgstream.DropPartitionMsg:
+			if msg.CollectionID != ddNode.collectionID {
+				continue
+			}
+			ddNode.dropPartition(msg)
 		default:
 			log.Error("Not supporting message type", zap.Any("Type", msg.Type()))
 		}
@@ -439,7 +456,7 @@ func (ddNode *ddNode) dropPartition(msg *msgstream.DropPartitionMsg) {
 }
 
 func newDDNode(ctx context.Context, inFlushCh <-chan *flushMsg,
-	replica Replica, idAllocator allocatorInterface) *ddNode {
+	replica Replica, idAllocator allocatorInterface, collectionID UniqueID) *ddNode {
 	maxQueueLength := Params.FlowGraphMaxQueueLength
 	maxParallelism := Params.FlowGraphMaxParallelism
 
@@ -478,5 +495,7 @@ func newDDNode(ctx context.Context, inFlushCh <-chan *flushMsg,
 		kv:          minioKV,
 		replica:     replica,
 		flushMap:    &sync.Map{},
+
+		collectionID: collectionID,
 	}
 }
diff --git a/internal/datanode/flow_graph_dd_node_test.go b/internal/datanode/flow_graph_dd_node_test.go
index 76c97413839273c0282a3aabd9e3945e084e4171..4d0784dae56ba9552da2d7b0107e11b5d2705b6b 100644
--- a/internal/datanode/flow_graph_dd_node_test.go
+++ b/internal/datanode/flow_graph_dd_node_test.go
@@ -45,9 +45,9 @@ func TestFlowGraphDDNode_Operate(t *testing.T) {
 	defer close(inFlushCh)
 
 	replica := newReplica()
-	ddNode := newDDNode(ctx, inFlushCh, replica, NewAllocatorFactory())
-
 	collID := UniqueID(0)
+	ddNode := newDDNode(ctx, inFlushCh, replica, NewAllocatorFactory(), collID)
+
 	collName := "col-test-0"
 	// create collection
 	createCollReq := internalpb.CreateCollectionRequest{