본관은 광산(光山). 자는 영숙(永淑), 호는 서석(瑞石) 또는 정관재(靜觀齋). 할아버지는 참판 김반(金槃)이고, 아버지는 생원 김익겸(金益兼)이며, 어머니는 해평윤씨(海平尹氏)로 참판 윤지(尹墀)의 딸이다. 형조참판 김장생(金長生)의 증손이자 인경왕후(仁敬王后)의 아버지이다. 작은아버지인 김익희(金益熙)에게서 수학했다. 송시열(宋時烈)의 문인이다.
1652년(효종 3) 사마시를 거쳐 이듬해 별시 문과에 을과로 급제해 승문원에 등용되었다. 이어 주서 · 설서, 예조와 병조의 낭관, 지평 · 문학을 거쳐, 수찬 · 정언 · 교리 등을 역임하였다.
1657년 교리로서 글을 올려 『오례의(五禮儀)』의 복상제(服喪制) 등 잘못된 부분의 개정을 청하였다. 1659년 5월 효종이 죽고 자의대비(慈懿大妃)의 복상 문제로 논란이 일자, 기년설(朞年說)을 주장해 3년설을 주장하는 남인 윤선도(尹善道)를 공격하였다.
1671년 딸을 세자빈으로 들여보내고, 1673년영릉(寧陵)을 옮길 때에 산릉도감(山陵都監)의 당상관이 되었다. 1674년 7월 병조판서로서 다시 자의대비의 복제에 대해 소를 올려 3년상을 주장하였다.
그 해 숙종이 즉위하자 국구(國舅)로서 영돈녕부사(領敦寧府事)에 승진되고 광성부원군(光城府院君)에 봉해졌다. 총융사(摠戎使)를 겸관해 병권을 장악했고 김수항(金壽恒)의 천거로 대제학이 되었다.
1680년(숙종 6) 경신환국 때 훈련대장으로서 끝까지 굽히지 않고 남인과 맞섰다. 그리고 강만철(姜萬鐵) 등이 허적의 서자 허견(許堅)과 종실인 복창군(福昌君) · 복선군(福善君) · 복평군(福平君) 등이 역모를 꾀한다고 고발하자 이를 다스려 보사공신(保社功臣) 1등에 책록되었다.
아들 김진규(金鎭圭), 손자 김양택(金陽澤)의 3대가 문형(文衡)을 맡았다. 노론의 과격파로서 1689년 기사환국으로 남인이 정권을 잡자 삭직되었다가 뒤에 복직되었다. 현종의 묘정에 배향되었고, 시호는 문충(文忠)이다. 저서로는 『서석집(瑞石集)』 18권이 있다.